diff --git a/dotfiles/Passwords.kdbx b/dotfiles/Passwords.kdbx
new file mode 100644
index 0000000..8261ecf
Binary files /dev/null and b/dotfiles/Passwords.kdbx differ
diff --git a/dotfiles/kak-lsp/kak-lsp.toml b/dotfiles/kak-lsp/kak-lsp.toml
new file mode 100644
index 0000000..286505e
--- /dev/null
+++ b/dotfiles/kak-lsp/kak-lsp.toml
@@ -0,0 +1,447 @@
+snippet_support = true
+verbosity = 2
+
+[server]
+# exit session if no requests were received during given period in seconds
+# set to 0 to disable
+timeout = 1800 # seconds = 30 minutes
+
+[language.bash]
+filetypes = ["sh"]
+roots = [".git", ".hg"]
+command = "bash-language-server"
+args = ["start"]
+
+[language.c_cpp]
+filetypes = ["c", "cpp"]
+roots = ["compile_commands.json", ".clangd", ".git", ".hg"]
+command = "clangd"
+
+[language.clojure]
+filetypes = ["clojure"]
+roots = ["project.clj", ".git", ".hg"]
+command = "clojure-lsp"
+settings_section = "_"
+[language.clojure.settings._]
+# See https://clojure-lsp.io/settings/#all-settings
+# source-paths-ignore-regex = ["resources.*", "target.*"]
+
+[language.cmake]
+filetypes = ["cmake"]
+roots = ["CMakeLists.txt", ".git", ".hg"]
+command = "cmake-language-server"
+
+[language.crystal]
+filetypes = ["crystal"]
+roots = ["shard.yml"]
+command = "crystalline"
+
+[language.css]
+filetypes = ["css"]
+roots = ["package.json", ".git", ".hg"]
+command = "vscode-css-languageserver"
+args = ["--stdio"]
+
+[language.less]
+filetypes = ["less"]
+roots = ["package.json", ".git", ".hg"]
+command = "vscode-css-languageserver"
+args = ["--stdio"]
+
+[language.scss]
+filetypes = ["scss"]
+roots = ["package.json", ".git", ".hg"]
+command = "vscode-css-languageserver"
+args = ["--stdio"]
+
+[language.d]
+filetypes = ["d", "di"]
+roots = [".git", "dub.sdl", "dub.json"]
+command = "dls"
+
+[language.dart]
+# start shell to find path to dart analysis server source
+filetypes = ["dart"]
+roots = ["pubspec.yaml", ".git", ".hg"]
+command = "dart"
+args = ["language-server"]
+[language.dart.settings.dart]
+lineLength = 120
+
+[language.elixir]
+filetypes = ["elixir"]
+roots = ["mix.exs"]
+command = "elixir-ls"
+settings_section = "elixirLS"
+[language.elixir.settings.elixirLS]
+# See https://github.com/elixir-lsp/elixir-ls/blob/master/apps/language_server/lib/language_server/server.ex
+# dialyzerEnable = true
+
+[language.elm]
+filetypes = ["elm"]
+roots = ["elm.json"]
+command = "elm-language-server"
+args = ["--stdio"]
+settings_section = "elmLS"
+[language.elm.settings.elmLS]
+# See https://github.com/elm-tooling/elm-language-server#server-settings
+runtime = "node"
+elmPath = "elm"
+elmFormatPath = "elm-format"
+elmTestPath = "elm-test"
+
+[language.elvish]
+filetypes = ["elvish"]
+roots = [".git", ".hg"]
+command = "elvish"
+args = ["-lsp"]
+
+[language.erlang]
+filetypes = ["erlang"]
+# See https://github.com/erlang-ls/erlang_ls.git for more information and
+# how to configure. This default config should work in most cases though.
+roots = ["rebar.config", "erlang.mk", ".git", ".hg"]
+command = "erlang_ls"
+
+[language.go]
+filetypes = ["go"]
+roots = ["Gopkg.toml", "go.mod", ".git", ".hg"]
+command = "gopls"
+settings_section = "gopls"
+[language.go.settings.gopls]
+# See https://github.com/golang/tools/blob/master/gopls/doc/settings.md
+# "build.buildFlags" = []
+
+[language.haskell]
+filetypes = ["haskell"]
+roots = ["hie.yaml", "cabal.project", "Setup.hs", "stack.yaml", "*.cabal"]
+command = "haskell-language-server-wrapper"
+args = ["--lsp"]
+settings_section = "_"
+[language.haskell.settings._]
+# See https://haskell-language-server.readthedocs.io/en/latest/configuration.html
+# haskell.formattingProvider = "ormolu"
+
+[language.html]
+filetypes = ["html"]
+roots = ["package.json"]
+command = "vscode-html-languageserver"
+args = ["--stdio"]
+
+# # Commented out by default because you still need to set the paths in the JDT
+# # Language Server arguments below before this can become a valid configuration.
+# [language.java]
+# filetypes = ["java"]
+# roots = [".git", "mvnw", "gradlew"]
+# command = "java"
+# args = [
+#     "-Declipse.application=org.eclipse.jdt.ls.core.id1",
+#     "-Dosgi.bundles.defaultStartLevel=4",
+#     "-Declipse.product=org.eclipse.jdt.ls.core.product",
+#     "-Dlog.level=ALL",
+#     "-Dfile.encoding=utf-8",
+#     "--add-modules=ALL-SYSTEM",
+#     "--add-opens",
+#     "java.base/java.util=ALL-UNNAMED",
+#     "--add-opens",
+#     "java.base/java.lang=ALL-UNNAMED",
+#     "-noverify",
+#     "-Xmx1G",
+#     "-jar",
+#     "/path/to/eclipse.jdt.ls/repository/plugins/org.eclipse.equinox.launcher_1.6.100.v20201223-0822.jar",
+#     "-configuration",
+#     "/path/to/eclipse.jdt.ls/repository/config_linux",
+#     "-data",
+#     "/path/to/eclipse-workspace",
+# ]
+# [language.java.settings]
+# # See https://github.dev/eclipse/eclipse.jdt.ls
+# # "java.format.insertSpaces" = true
+
+[language.javascriptreact]
+filetypes = ["javascript"]
+roots = ["package.json", "tsconfig.json", ".git", ".hg"]
+command = "typescript-language-server"
+args = ["--stdio"]
+settings_section = "_"
+[language.javascriptreact.settings._]
+# quotePreference = "single"
+# javascript.format.semicolons = "insert"
+
+[language.json]
+filetypes = ["json"]
+roots = ["package.json"]
+command = "vscode-json-language-server"
+args = ["--stdio"]
+
+# Requires Julia package "LanguageServer"
+# Run: `julia --project=@kak-lsp -e 'import Pkg; Pkg.add("LanguageServer")'` to install it
+# Configuration adapted from https://github.com/neovim/nvim-lspconfig/blob/bcebfac7429cd8234960197dca8de1767f3ef5d3/lua/lspconfig/julials.lua
+[language.julia]
+filetypes = ["julia"]
+roots = ["Project.toml", ".git", ".hg"]
+command = "julia"
+args = [
+    "--startup-file=no",
+    "--history-file=no",
+    "-e",
+    """
+    ls_install_path = joinpath(get(DEPOT_PATH, 1, joinpath(homedir(), ".julia")), "environments", "kak-lsp");
+    pushfirst!(LOAD_PATH, ls_install_path);
+    using LanguageServer;
+    popfirst!(LOAD_PATH);
+    depot_path = get(ENV, "JULIA_DEPOT_PATH", "");
+    buffer_file = ENV["kak_buffile"];
+    project_path = let
+      dirname(something(
+        # 1. Check if there is an explicitly set project
+        Base.load_path_expand((
+          p = get(ENV, "JULIA_PROJECT", nothing);
+          p === nothing ? nothing : isempty(p) ? nothing : p
+        )),
+        # 2. Check for Project.toml in current working directory
+        Base.current_project(pwd()),
+        # 3. Check for Project.toml from buffer's full file path excluding the file name
+        Base.current_project(dirname(buffer_file)),
+        # 4. Fallback to global environment
+        Base.active_project()
+      ))
+    end
+    server = LanguageServer.LanguageServerInstance(stdin, stdout, project_path, depot_path);
+    server.runlinter = true;
+    run(server);
+    """,
+]
+[language.julia.settings]
+# See https://github.com/julia-vscode/LanguageServer.jl/blob/master/src/requests/workspace.jl
+# Format options. See https://github.com/julia-vscode/DocumentFormat.jl/blob/master/src/DocumentFormat.jl
+# "julia.format.indent" = 4
+# Lint options. See https://github.com/julia-vscode/StaticLint.jl/blob/master/src/linting/checks.jl
+# "julia.lint.call" = true
+# Other options, see https://github.com/julia-vscode/LanguageServer.jl/blob/master/src/requests/workspace.jl
+# "julia.lint.run" = "true"
+
+[language.latex]
+filetypes = ["latex"]
+roots = [".git", ".hg"]
+command = "texlab"
+settings_section = "texlab"
+[language.latex.settings.texlab]
+# See https://github.com/latex-lsp/texlab/wiki/Configuration
+#
+# Preview configuration for zathura with SyncTeX search.
+# For other PDF viewers see https://github.com/latex-lsp/texlab/wiki/Previewing
+forwardSearch.executable = "zathura"
+forwardSearch.args = [
+    "%p",
+    "--synctex-forward", # Support texlab-forward-search
+    "%l:1:%f",
+    "--synctex-editor-command", # Inverse search: use Control+Left-Mouse-Button to jump to source.
+    """
+        sh -c '
+            echo "
+                evaluate-commands -client %opt{texlab_client} %{
+                    evaluate-commands -try-client %opt{jumpclient} %{
+                        edit -- %{input} %{line}
+                    }
+                }
+            " | kak -p $kak_session
+        '
+    """,
+]
+
+[language.lua]
+filetypes = ["lua"]
+roots = [".git", ".hg"]
+command = "lua-language-server"
+[language.lua.settings.Lua]
+# See https://github.com/sumneko/vscode-lua/blob/master/setting/schema.json
+# diagnostics.enable = true
+
+[language.markdown]
+filetype = ["md", "markdown"]
+roots = [".git", ".hg"]
+command = "vscode-markdown-language-server"
+args = ["--stdio"]
+
+# [[language]]
+# name = "markdown"
+# scope = "source.md"
+# injection-regex = "md|markdown"
+# file-types = ["md", "markdown", "PULLREQ_EDITMSG", "mkd", "mdwn", "mdown", "markdn", "mdtxt", "mdtext", "workbook"]
+# roots = [".marksman.toml"]
+# language-servers = [ "marksman" ]
+# indent = { tab-width = 2, unit = "  " }
+
+[language.nim]
+filetypes = ["nim"]
+roots = ["*.nimble", ".git", ".hg"]
+command = "nimlsp"
+
+[language.nix]
+filetypes = ["nix"]
+roots = ["flake.nix", "shell.nix", ".git", ".hg"]
+command = "rnix-lsp"
+
+[language.ocaml]
+filetypes = ["ocaml"]
+# Often useful to simply do a `touch dune-workspace` in your project root folder if you have problems with root detection
+roots = ["dune-workspace", "dune-project", "Makefile", "opam", "*.opam", "esy.json", ".git", ".hg", "dune"]
+command = "ocamllsp"
+
+[language.php]
+filetypes = ["php"]
+roots = [".htaccess", "composer.json"]
+command = "intelephense"
+args = ["--stdio"]
+settings_section = "intelephense"
+[language.php.settings]
+intelephense.storagePath = "/tmp/intelephense"
+
+[language.proto]
+filetypes = ["protobuf"]
+roots = [".git", ".hg"]
+command = "pls" # https://github.com/lasorda/protobuf-language-server
+
+[language.python]
+filetypes = ["python"]
+roots = ["requirements.txt", "setup.py", ".git", ".hg"]
+command = "pylsp"
+settings_section = "_"
+[language.python.settings._]
+# See https://github.com/python-lsp/python-lsp-server#configuration
+# pylsp.configurationSources = ["flake8"]
+pylsp.plugins.jedi_completion.include_params = true
+
+[language.r]
+filetypes = ["r"]
+roots = ["DESCRIPTION", ".git", ".hg"]
+command = "R"
+args = ["--slave", "-e", "languageserver::run()"]
+
+[language.racket]
+filetypes = ["racket"]
+roots = ["info.rkt"]
+command = "racket"
+args = ["-l", "racket-langserver"]
+
+[language.reason]
+filetypes = ["reason"]
+roots = ["package.json", "Makefile", ".git", ".hg"]
+command = "ocamllsp"
+
+[language.ruby]
+filetypes = ["ruby"]
+roots = ["Gemfile"]
+command = "solargraph"
+args = ["stdio"]
+settings_section = "_"
+[language.ruby.settings._]
+# See https://github.com/castwide/solargraph/blob/master/lib/solargraph/language_server/host.rb
+# diagnostics = false
+
+# [language.rust]
+# filetypes = ["rust"]
+# roots = ["Cargo.toml"]
+# command = "sh"
+# args = [
+#     "-c",
+#     """
+#         if path=$(rustup which rls 2>/dev/null); then
+#             "$path"
+#         else
+#             rls
+#         fi
+#     """,
+# ]
+# [language.rust.settings.rust]
+# # See https://github.com/rust-lang/rls#configuration
+# # features = []
+
+[language.rust]
+filetypes = ["rust"]
+roots = ["Cargo.toml"]
+command = "sh"
+args = [
+    "-c",
+    """
+        if path=$(rustup which rust-analyzer 2>/dev/null); then
+            "$path"
+        else
+            rust-analyzer
+        fi
+    """,
+]
+settings_section = "rust-analyzer"
+[language.rust.settings.rust-analyzer]
+# See https://rust-analyzer.github.io/manual.html#configuration
+hoverActions.enable = false # kak-lsp doesn't support this at the moment
+# cargo.features = []
+
+[language.terraform]
+filetypes = ["terraform"]
+roots = ["*.tf"]
+command = "terraform-ls"
+args = ["serve"]
+[language.terraform.settings.terraform-ls]
+# See https://github.com/hashicorp/terraform-ls/blob/main/docs/SETTINGS.md
+# rootModulePaths = []
+
+# [language.typescriptreact]
+# filetypes = ["typescript"]
+# roots = ["package.json", "tsconfig.json", ".git", ".hg"]
+# command = "typescript-language-server"
+# args = ["--stdio"]
+# settings_section = "_"
+# [language.typescriptreact.settings._]
+# quotePreference = "double"
+# typescript.format.semicolons = "insert"
+
+[language.tsx]
+filetypes = ["typescript"]
+roots = ["package.json", "tsconfig.json", ".git", ".hg"]
+command = "typescript-language-server"
+args = ["--stdio"]
+settings_section = "_"
+
+# [language.typescript.settings.deno]
+# enable = true
+# lint = true
+
+[language.yaml]
+filetypes = ["yaml"]
+roots = [".git", ".hg"]
+command = "yaml-language-server"
+args = ["--stdio"]
+[language.yaml.settings]
+# See https://github.com/redhat-developer/yaml-language-server#language-server-settings
+# Defaults are at https://github.com/redhat-developer/yaml-language-server/blob/master/src/yamlSettings.ts
+# yaml.format.enable = true
+
+[language.zig]
+filetypes = ["zig"]
+roots = ["build.zig"]
+command = "zls"
+
+# Semantic tokens support
+# See https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_semanticTokens
+# for the default list of tokens and modifiers.
+# However, many language servers implement their own values.
+# Make sure to check the output of `lsp-capabilities` and each server's documentation and source code as well.
+# Examples:
+# - TypeScript: https://github.com/microsoft/vscode-languageserver-node/blob/main/client/src/common/semanticTokens.ts
+# - Rust Analyzer: https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/ide/src/syntax_highlighting.rs
+[semantic_tokens]
+faces = [
+    {face="documentation", token="comment", modifiers=["documentation"]},
+    {face="comment", token="comment"},
+    {face="function", token="function"},
+    {face="keyword", token="keyword"},
+    {face="module", token="namespace"},
+    {face="operator", token="operator"},
+    {face="string", token="string"},
+    {face="type", token="type"},
+    {face="default+d", token="variable", modifiers=["readonly"]},
+    {face="default+d", token="variable", modifiers=["constant"]},
+    {face="variable", token="variable"},
+]
diff --git a/dotfiles/kak/colors/catppuccin_frappe.kak b/dotfiles/kak/colors/catppuccin_frappe.kak
new file mode 100644
index 0000000..ec43367
--- /dev/null
+++ b/dotfiles/kak/colors/catppuccin_frappe.kak
@@ -0,0 +1,83 @@
+# Catppuccin theme for Kakoune
+
+# Color palette
+declare-option	str	rosewater			'rgb:f2d5cf'
+declare-option	str	red					'rgb:e78284'
+declare-option	str	mauve				'rgb:ca9ee6'
+declare-option	str	maroon				'rgb:ea999c'
+declare-option	str	pink				'rgb:f4b8e4'
+declare-option	str	cyan				'rgb:85c1dc'
+declare-option	str	yellow				'rgb:e5c890'
+declare-option	str	green				'rgb:a6d189'
+declare-option	str	white				'rgb:c6d0f5'
+declare-option	str	blue				'rgb:8caaee'
+declare-option	str	sky					'rgb:99d1db'
+declare-option	str	lavender			'rgb:babbf1'
+declare-option	str	black1				'rgb:292c3c'
+declare-option	str	black2				'rgb:303446'
+declare-option	str black3				'rgb:414559'
+declare-option	str orange				'rgb:ef9f76'
+declare-option	str teal				'rgb:81c8be'
+declare-option	str	gray0				'rgb:626880'
+declare-option	str	gray1				'rgb:737994'
+declare-option	str	bright_red			%opt{red}
+declare-option	str	bright_green		%opt{green}
+declare-option	str	bright_yellow		%opt{yellow}
+declare-option	str	bright_blue			%opt{blue}
+declare-option	str	bright_cyan			%opt{cyan}
+declare-option	str	bright_white		%opt{white}
+declare-option	str	foreground			%opt{white}
+declare-option	str	background			%opt{black2}
+
+# Markup
+set-face	global	title				"%opt{rosewater}"
+set-face	global	header				"%opt{bright_red}"
+set-face	global	bold				"%opt{mauve}"
+set-face	global	italic				"%opt{lavender}"
+set-face	global	mono				"%opt{green}"
+set-face	global	block				"%opt{cyan}"
+set-face	global	link				"%opt{green}"
+set-face	global	bullet				"%opt{green}"
+set-face	global	list				"%opt{white}"
+
+# Builtins
+set-face	global	Default				"%opt{white},%opt{background}"
+set-face	global	PrimarySelection	"%opt{gray0},%opt{lavender}"
+set-face	global	SecondarySelection	"%opt{lavender},%opt{gray0}"
+set-face	global	PrimaryCursor		"%opt{background},%opt{rosewater}"
+set-face	global	SecondaryCursor		"%opt{black1},%opt{teal}"
+set-face	global	PrimaryCursorEol	"%opt{gray0},%opt{mauve}"
+set-face	global	SecondaryCursorEol	"%opt{gray0},%opt{maroon}"
+set-face	global	LineNumbers			"%opt{gray1},%opt{background}"
+set-face	global	LineNumberCursor	"%opt{lavender},%opt{gray0}+b"
+set-face	global	LineNumbersWrapped	"%opt{teal},%opt{black1}+i"
+set-face	global	MenuForeground 		"%opt{white},%opt{gray0}+b"
+set-face	global	MenuBackground		"%opt{white},%opt{black3}"
+set-face	global	MenuInfo			"%opt{black1},%opt{blue}"
+set-face	global	Information			"%opt{black1},%opt{lavender}"
+set-face	global	Error				"%opt{red},%opt{black2}"
+set-face	global	StatusLine			"%opt{white},%opt{black1}"
+set-face	global	StatusLineMode		"%opt{black2},%opt{yellow}"
+set-face	global	StatusLineInfo		"%opt{background},%opt{green}"
+set-face	global	StatusLineValue		"%opt{orange},%opt{gray0}"
+set-face	global	StatusCursor		"%opt{black1},%opt{lavender}"
+set-face	global	Prompt				"%opt{green},%opt{black2}"
+set-face	global	MatchingChar		"%opt{maroon},%opt{black2}"
+set-face	global	Whitespace			"%opt{gray1},%opt{background}+f"
+set-face	global	WrapMarker			Whitespace
+set-face	global	BufferPadding		"%opt{background},%opt{background}"
+
+# Code
+set-face	global	value				"%opt{orange}"
+set-face	global	type				"%opt{rosewater}"
+set-face	global	variable			"%opt{white}"
+set-face	global	module				"%opt{maroon}"
+set-face	global	function			"%opt{sky}"
+set-face	global	string				"%opt{green}"
+set-face	global	keyword				"%opt{blue}"
+set-face	global	operator			"%opt{blue}"
+set-face	global	attribute			"%opt{green}"
+set-face	global	comment				"%opt{gray1}"
+set-face	global	documentation		comment
+set-face	global	meta				"%opt{pink}"
+set-face	global	builtin				"%opt{lavender}+b"
diff --git a/dotfiles/kak/colors/catppuccin_latte.kak b/dotfiles/kak/colors/catppuccin_latte.kak
new file mode 100644
index 0000000..f547168
--- /dev/null
+++ b/dotfiles/kak/colors/catppuccin_latte.kak
@@ -0,0 +1,83 @@
+# Catppuccin theme for Kakoune
+
+# Color palette
+declare-option	str	rosewater			'rgb:dc8a78'
+declare-option	str	red					'rgb:d20f39'
+declare-option	str	mauve				'rgb:8839ef'
+declare-option	str	maroon				'rgb:e64553'
+declare-option	str	pink				'rgb:ea76cb'
+declare-option	str	cyan				'rgb:209fb5'
+declare-option	str	yellow				'rgb:df8e1d'
+declare-option	str	green				'rgb:40a02b'
+declare-option	str	white				'rgb:4c4f69'
+declare-option	str	blue				'rgb:1e66f5'
+declare-option	str	sky					'rgb:04a5e5'
+declare-option	str	lavender			'rgb:7287fd'
+declare-option	str	black1				'rgb:e6e9ef'
+declare-option	str	black2				'rgb:eff1f5'
+declare-option	str black3				'rgb:ccd0da'
+declare-option	str orange				'rgb:fe640b'
+declare-option	str teal				'rgb:179299'
+declare-option	str	gray0				'rgb:acb0be'
+declare-option	str	gray1				'rgb:9ca0b0'
+declare-option	str	bright_red			%opt{red}
+declare-option	str	bright_green		%opt{green}
+declare-option	str	bright_yellow		%opt{yellow}
+declare-option	str	bright_blue			%opt{blue}
+declare-option	str	bright_cyan			%opt{cyan}
+declare-option	str	bright_white		%opt{white}
+declare-option	str	foreground			%opt{white}
+declare-option	str	background			%opt{black2}
+
+# Markup
+set-face	global	title				"%opt{rosewater}"
+set-face	global	header				"%opt{bright_red}"
+set-face	global	bold				"%opt{mauve}"
+set-face	global	italic				"%opt{lavender}"
+set-face	global	mono				"%opt{green}"
+set-face	global	block				"%opt{cyan}"
+set-face	global	link				"%opt{green}"
+set-face	global	bullet				"%opt{green}"
+set-face	global	list				"%opt{white}"
+
+# Builtins
+set-face	global	Default				"%opt{white},%opt{background}"
+set-face	global	PrimarySelection	"%opt{gray0},%opt{lavender}"
+set-face	global	SecondarySelection	"%opt{lavender},%opt{gray0}"
+set-face	global	PrimaryCursor		"%opt{background},%opt{rosewater}"
+set-face	global	SecondaryCursor		"%opt{black1},%opt{teal}"
+set-face	global	PrimaryCursorEol	"%opt{gray0},%opt{mauve}"
+set-face	global	SecondaryCursorEol	"%opt{gray0},%opt{maroon}"
+set-face	global	LineNumbers			"%opt{gray1},%opt{background}"
+set-face	global	LineNumberCursor	"%opt{lavender},%opt{gray0}+b"
+set-face	global	LineNumbersWrapped	"%opt{teal},%opt{black1}+i"
+set-face	global	MenuForeground 		"%opt{white},%opt{gray0}+b"
+set-face	global	MenuBackground		"%opt{white},%opt{black3}"
+set-face	global	MenuInfo			"%opt{black1},%opt{blue}"
+set-face	global	Information			"%opt{black1},%opt{lavender}"
+set-face	global	Error				"%opt{red},%opt{black2}"
+set-face	global	StatusLine			"%opt{white},%opt{black1}"
+set-face	global	StatusLineMode		"%opt{black2},%opt{yellow}"
+set-face	global	StatusLineInfo		"%opt{background},%opt{green}"
+set-face	global	StatusLineValue		"%opt{orange},%opt{gray0}"
+set-face	global	StatusCursor		"%opt{black1},%opt{lavender}"
+set-face	global	Prompt				"%opt{green},%opt{black2}"
+set-face	global	MatchingChar		"%opt{maroon},%opt{black2}"
+set-face	global	Whitespace			"%opt{gray1},%opt{background}+f"
+set-face	global	WrapMarker			Whitespace
+set-face	global	BufferPadding		"%opt{background},%opt{background}"
+
+# Code
+set-face	global	value				"%opt{orange}"
+set-face	global	type				"%opt{rosewater}"
+set-face	global	variable			"%opt{white}"
+set-face	global	module				"%opt{maroon}"
+set-face	global	function			"%opt{sky}"
+set-face	global	string				"%opt{green}"
+set-face	global	keyword				"%opt{blue}"
+set-face	global	operator			"%opt{blue}"
+set-face	global	attribute			"%opt{green}"
+set-face	global	comment				"%opt{gray1}"
+set-face	global	documentation		comment
+set-face	global	meta				"%opt{pink}"
+set-face	global	builtin				"%opt{lavender}+b"
diff --git a/dotfiles/kak/colors/catppuccin_macchiato.kak b/dotfiles/kak/colors/catppuccin_macchiato.kak
new file mode 100644
index 0000000..e518715
--- /dev/null
+++ b/dotfiles/kak/colors/catppuccin_macchiato.kak
@@ -0,0 +1,83 @@
+# Catppuccin theme for Kakoune
+
+# Color palette
+declare-option	str	rosewater			'rgb:f4dbd6'
+declare-option	str	red					'rgb:ed8796'
+declare-option	str	mauve				'rgb:c6a0f6'
+declare-option	str	maroon				'rgb:ee99a0'
+declare-option	str	pink				'rgb:f5bde6'
+declare-option	str	cyan				'rgb:7dc4e4'
+declare-option	str	yellow				'rgb:eed49f'
+declare-option	str	green				'rgb:a6da95'
+declare-option	str	white				'rgb:cad3f5'
+declare-option	str	blue				'rgb:8aadf4'
+declare-option	str	sky					'rgb:91d7e3'
+declare-option	str	lavender			'rgb:b7bdf8'
+declare-option	str	black1				'rgb:1e2030'
+declare-option	str	black2				'rgb:24273a'
+declare-option	str black3				'rgb:363a4f'
+declare-option	str orange				'rgb:f5a97f'
+declare-option	str teal				'rgb:8bd5ca'
+declare-option	str	gray0				'rgb:5b6078'
+declare-option	str	gray1				'rgb:6e738d'
+declare-option	str	bright_red			%opt{red}
+declare-option	str	bright_green		%opt{green}
+declare-option	str	bright_yellow		%opt{yellow}
+declare-option	str	bright_blue			%opt{blue}
+declare-option	str	bright_cyan			%opt{cyan}
+declare-option	str	bright_white		%opt{white}
+declare-option	str	foreground			%opt{white}
+declare-option	str	background			%opt{black2}
+
+# Markup
+set-face	global	title				"%opt{rosewater}"
+set-face	global	header				"%opt{bright_red}"
+set-face	global	bold				"%opt{mauve}"
+set-face	global	italic				"%opt{lavender}"
+set-face	global	mono				"%opt{green}"
+set-face	global	block				"%opt{cyan}"
+set-face	global	link				"%opt{green}"
+set-face	global	bullet				"%opt{green}"
+set-face	global	list				"%opt{white}"
+
+# Builtins
+set-face	global	Default				"%opt{white},%opt{background}"
+set-face	global	PrimarySelection	"%opt{gray0},%opt{lavender}"
+set-face	global	SecondarySelection	"%opt{lavender},%opt{gray0}"
+set-face	global	PrimaryCursor		"%opt{background},%opt{rosewater}"
+set-face	global	SecondaryCursor		"%opt{black1},%opt{teal}"
+set-face	global	PrimaryCursorEol	"%opt{gray0},%opt{mauve}"
+set-face	global	SecondaryCursorEol	"%opt{gray0},%opt{maroon}"
+set-face	global	LineNumbers			"%opt{gray1},%opt{background}"
+set-face	global	LineNumberCursor	"%opt{lavender},%opt{gray0}+b"
+set-face	global	LineNumbersWrapped	"%opt{teal},%opt{black1}+i"
+set-face	global	MenuForeground 		"%opt{white},%opt{gray0}+b"
+set-face	global	MenuBackground		"%opt{white},%opt{black3}"
+set-face	global	MenuInfo			"%opt{black1},%opt{blue}"
+set-face	global	Information			"%opt{black1},%opt{lavender}"
+set-face	global	Error				"%opt{red},%opt{black2}"
+set-face	global	StatusLine			"%opt{white},%opt{black1}"
+set-face	global	StatusLineMode		"%opt{black2},%opt{yellow}"
+set-face	global	StatusLineInfo		"%opt{background},%opt{green}"
+set-face	global	StatusLineValue		"%opt{orange},%opt{gray0}"
+set-face	global	StatusCursor		"%opt{black1},%opt{lavender}"
+set-face	global	Prompt				"%opt{green},%opt{black2}"
+set-face	global	MatchingChar		"%opt{maroon},%opt{black2}"
+set-face	global	Whitespace			"%opt{gray1},%opt{background}+f"
+set-face	global	WrapMarker			Whitespace
+set-face	global	BufferPadding		"%opt{background},%opt{background}"
+
+# Code
+set-face	global	value				"%opt{orange}"
+set-face	global	type				"%opt{pink}"
+set-face	global	variable			"%opt{white}"
+set-face	global	module				"%opt{mauve}"
+set-face	global	function			"%opt{sky}"
+set-face	global	string				"%opt{green}"
+set-face	global	keyword				"%opt{blue}"
+set-face	global	operator			"%opt{blue}"
+set-face	global	attribute			"%opt{green}"
+set-face	global	comment				"%opt{gray1}"
+set-face	global	documentation		comment
+set-face	global	meta				"%opt{pink}"
+set-face	global	builtin				"%opt{lavender}+b"
diff --git a/dotfiles/kak/colors/catppuccin_mocha.kak b/dotfiles/kak/colors/catppuccin_mocha.kak
new file mode 100644
index 0000000..6191160
--- /dev/null
+++ b/dotfiles/kak/colors/catppuccin_mocha.kak
@@ -0,0 +1,83 @@
+# Catppuccin theme for Kakoune
+
+# Color palette
+declare-option	str	rosewater			'rgb:f5e0dc'
+declare-option	str	red					'rgb:f38ba8'
+declare-option	str	mauve				'rgb:cba6f7'
+declare-option	str	maroon				'rgb:eba0ac'
+declare-option	str	pink				'rgb:f5c2e7'
+declare-option	str	cyan				'rgb:74c7ec'
+declare-option	str	yellow				'rgb:f9e2af'
+declare-option	str	green				'rgb:a6e3a1'
+declare-option	str	white				'rgb:cdd6f4'
+declare-option	str	blue				'rgb:89b4fa'
+declare-option	str	sky					'rgb:89dceb'
+declare-option	str	lavender			'rgb:b4befe'
+declare-option	str	black1				'rgb:181825'
+declare-option	str	black2				'rgb:1e1e2e'
+declare-option	str black3				'rgb:313244'
+declare-option	str orange				'rgb:fab387'
+declare-option	str teal				'rgb:94e2d5'
+declare-option	str	gray0				'rgb:585b70'
+declare-option	str	gray1				'rgb:6c7086'
+declare-option	str	bright_red			%opt{red}
+declare-option	str	bright_green		%opt{green}
+declare-option	str	bright_yellow		%opt{yellow}
+declare-option	str	bright_blue			%opt{blue}
+declare-option	str	bright_cyan			%opt{cyan}
+declare-option	str	bright_white		%opt{white}
+declare-option	str	foreground			%opt{white}
+declare-option	str	background			%opt{black2}
+
+# Markup
+set-face	global	title				"%opt{rosewater}"
+set-face	global	header				"%opt{bright_red}"
+set-face	global	bold				"%opt{mauve}"
+set-face	global	italic				"%opt{lavender}"
+set-face	global	mono				"%opt{green}"
+set-face	global	block				"%opt{cyan}"
+set-face	global	link				"%opt{green}"
+set-face	global	bullet				"%opt{green}"
+set-face	global	list				"%opt{white}"
+
+# Builtins
+set-face	global	Default				"%opt{white},%opt{background}"
+set-face	global	PrimarySelection	"%opt{gray0},%opt{lavender}"
+set-face	global	SecondarySelection	"%opt{lavender},%opt{gray0}"
+set-face	global	PrimaryCursor		"%opt{background},%opt{rosewater}"
+set-face	global	SecondaryCursor		"%opt{black1},%opt{teal}"
+set-face	global	PrimaryCursorEol	"%opt{gray0},%opt{mauve}"
+set-face	global	SecondaryCursorEol	"%opt{gray0},%opt{maroon}"
+set-face	global	LineNumbers			"%opt{gray1},%opt{background}"
+set-face	global	LineNumberCursor	"%opt{lavender},%opt{gray0}+b"
+set-face	global	LineNumbersWrapped	"%opt{teal},%opt{black1}+i"
+set-face	global	MenuForeground 		"%opt{white},%opt{gray0}+b"
+set-face	global	MenuBackground		"%opt{white},%opt{black3}"
+set-face	global	MenuInfo			"%opt{black1},%opt{blue}"
+set-face	global	Information			"%opt{black1},%opt{lavender}"
+set-face	global	Error				"%opt{red},%opt{black2}"
+set-face	global	StatusLine			"%opt{white},%opt{black1}"
+set-face	global	StatusLineMode		"%opt{black2},%opt{yellow}"
+set-face	global	StatusLineInfo		"%opt{background},%opt{green}"
+set-face	global	StatusLineValue		"%opt{orange},%opt{gray0}"
+set-face	global	StatusCursor		"%opt{black1},%opt{lavender}"
+set-face	global	Prompt				"%opt{green},%opt{black2}"
+set-face	global	MatchingChar		"%opt{maroon},%opt{black2}"
+set-face	global	Whitespace			"%opt{gray1},%opt{background}+f"
+set-face	global	WrapMarker			Whitespace
+set-face	global	BufferPadding		"%opt{background},%opt{background}"
+
+# Code
+set-face	global	value				"%opt{orange}"
+set-face	global	type				"%opt{rosewater}"
+set-face	global	variable			"%opt{white}"
+set-face	global	module				"%opt{maroon}"
+set-face	global	function			"%opt{sky}"
+set-face	global	string				"%opt{green}"
+set-face	global	keyword				"%opt{blue}"
+set-face	global	operator			"%opt{blue}"
+set-face	global	attribute			"%opt{green}"
+set-face	global	comment				"%opt{gray1}"
+set-face	global	documentation		comment
+set-face	global	meta				"%opt{pink}"
+set-face	global	builtin				"%opt{lavender}+b"
diff --git a/dotfiles/kak/kakrc b/dotfiles/kak/kakrc
new file mode 100644
index 0000000..ec330c2
--- /dev/null
+++ b/dotfiles/kak/kakrc
@@ -0,0 +1,252 @@
+# ------------------
+# Plugin Setup
+# ------------------
+
+# IMORTANT NOTE:
+# I needed to open kakoune and type ':plug-install' to actually
+# install the plugins listed in this file. I did not see this 
+# mentioned in wikis or anything, so make sure to do this to
+# avoid searching github wikis and reddit needlessly.
+
+# Creates the /plugins folder if it doesnt exist each startup
+evaluate-commands %sh{
+    plugins="$kak_config/plugins"
+    mkdir -p "$plugins"
+    [ ! -e "$plugins/plug.kak" ] && \
+        git clone -q https://github.com/andreyorst/plug.kak.git "$plugins/plug.kak"
+    printf "%s\n" "source '$plugins/plug.kak/rc/plug.kak'"
+}
+plug "andreyorst/plug.kak" noload
+
+# ------------------
+# Editor Settings
+# ------------------
+
+# Disables startup message showing
+set-option global startup_info_version 30000000
+
+set-option global tabstop 4
+set-option global indentwidth 4
+set-option global scrolloff 5,3
+declare-option str kakrc_path "~/.config/kak/kakrc"
+declare-option str sway_conf_path "~/.config/sway/config.d/default"
+declare-option str shell_config "~/.zshrc"
+
+# plug "catppuccin/kakoune" theme config %{
+#     colorscheme catppuccin_macchiato
+# }
+colorscheme catppuccin_macchiato
+# relative line numbers
+hook global BufCreate .* %{
+    add-highlighter buffer/ number-lines -hlcursor
+}
+
+# Git Gutters
+hook global WinCreate .* %{ evaluate-commands %sh{
+  if [ $kak_buffile != $kak_bufname ] && git ls-files --error-unmatch "$kak_buffile" > /dev/null 2>&1; then
+    echo "git show-diff"
+  fi
+}}
+
+# Write on unfocus
+hook global FocusOut .* %{ try %{
+    write
+}}
+
+hook global BufWritePost .* %{ evaluate-commands 'git update-diff' }
+hook global BufReload .* %{ evaluate-commands 'git update-diff' }
+
+# Add default,red and bold style to these regex matches
+add-highlighter global/ regex \b(TODO|FIXME|XXX|NOTE)\b 0:default,red+rb
+
+# ------------------
+# Key bindings
+# ------------------
+
+# Remap hjkl navigation to colemak-dh layout
+map global normal n h
+map global normal e k
+map global normal i j
+map global normal o l
+
+map global normal N H
+map global normal E K
+map global normal I J
+map global normal O L
+
+# Remap insert command
+map global normal h i
+
+# Insert line above or below
+map global normal l o
+map global normal L O
+
+# No alt, remap
+map global normal <c-f> <a-f>  -docstring 'same as [f] but in the other direction'
+map global normal <c-t> <a-t>  -docstring 'same as [t] but in the other direction'
+map global normal <c-n> <a-h>  -docstring 'select to beginning of line'
+map global normal <c-o> <a-l>  -docstring 'select to end of line'
+map global normal <c-s> <a-s>  -docstring 'split selections on line boundaries'
+map global normal <c-S> <a-S>  -docstring 'select first and last character of each selection'
+map global normal '<c-;>' '<a-;>'  -docstring 'flip direction of each selection'
+map global normal <c-:> <a-:>  -docstring 'ensure selections are in forward direction (cursor then anchor)'
+map global normal <c-,> <a-,>  -docstring 'clear the main selection'
+
+# Scrolling remap
+map global normal <c-e> <pageup> -docstring 'Scroll screen up'
+map global normal <c-i> <pagedown> -docstring 'Scroll screen down'
+
+map global normal <c-/> ':comment-line<ret>' -docstring 'comment selected lines'
+
+# Ctrl-s to save
+map global normal <c-s> ':w<ret>' -docstring 'write buffer'
+# Ctrl-x to save and exit
+map global normal <c-x> ':w<ret>:db<ret>' -docstring 'write close buffer'
+
+# Colemak goto remappings
+map global goto n h -docstring 'line start'
+map global goto o l -docstring 'line end'
+map global goto e k -docstring 'buffer top'
+map global goto i j -docstring 'buffer bottom'
+
+map global goto h n
+map global goto l o
+map global goto k e
+map global goto j i
+
+# Remap view keys
+map global view n h
+map global view o l
+map global view e k
+map global view i j
+
+map global normal ( ': buffer-previous<ret>' -docstring 'prev buffer'
+map global normal ) ': buffer-next<ret>' -docstring 'next buffer'
+
+# map global normal [ ( -docstring 'rotate main selection'
+    
+# map global normal ] ) -docstring 'rotate main selection backwards'
+# Make x select <param> lines up and down
+def -params 1 extend-line-down %{
+  exec "<a-:>%arg{1}J"
+}
+
+def -params 1 extend-line-up %{
+  exec "<a-:><a-;>%arg{1}K<a-;>"
+  try %{
+    exec -draft ';<a-K>\n<ret>'
+    exec X
+  }
+  exec '<a-;><a-X>'
+}
+
+
+map global normal x ':extend-line-down %val{count}<ret>'
+map global normal X ':extend-line-up %val{count}<ret>'
+
+map global normal k n -docstring 'next result'
+map global normal K N -docstring 'next result add selection'
+
+map global normal <a-k> <c-n> -docstring 'prev result'
+map global normal <a-K> <c-N> -docstring 'prev result add selection'
+
+map global insert <down> <c-n> -docstring 'next completion'
+map global insert <up> <c-p> -docstring 'prev completion'
+
+# User Mode Bindings
+# Accessed with <space>
+declare-user-mode git
+map global user g ': enter-user-mode git<ret>' -docstring "Git mode"
+map global user p '<a-!>wl-paste -n<ret>' -docstring 'paste from system clip board'
+hook global RegisterModified '"' %{ nop %sh{
+  printf %s "$kak_main_reg_dquote" | wl-copy > /dev/null 2>&1 &
+}}
+
+# Open kakrc, double quotes needed to ecsape the kakrc_path option
+map global user o ":edit %opt{kakrc_path}<ret>" -docstring 'open kakrc'
+map global user z ":edit %opt{shell_config}<ret>" -docstring 'open shell config'
+map global user S ":edit %opt{sway_conf_path}<ret>" -docstring 'open wm config'
+# Git Mode Bindings
+map global git d '<esc>:git show-diff<ret>' -docstring "Show diff"
+
+# -----------------
+# LSP Configuration
+# -----------------
+
+plug "kak-lsp/kak-lsp" do %{
+  cargo install --locked --force --path .
+  mkdir -p ~/.config/kak-lsp
+  cp -n kak-lsp.toml ~/.config/kak-lsp/
+} config %{
+
+  # enable inlay hints
+  lsp-inlay-hints-enable global
+  lsp-inlay-diagnostics-enable global
+
+  # set global lsp_diagnostic_line_error_sign '║'
+  # set global lsp_diagnostic_line_warning_sign '┊'
+
+  define-command lsp-restart -docstring 'restart lsp server' %{ lsp-stop; lsp-start }
+
+  map global insert <tab> '<a-;>:try lsp-snippets-select-next-placeholders catch %{ execute-keys -with-hooks <lt>tab> }<ret>' -docstring 'Select next snippet placeholder'
+  map global object a '<a-semicolon>lsp-object<ret>' -docstring 'LSP any symbol'
+  map global object <a-a> '<a-semicolon>lsp-object<ret>' -docstring 'LSP any symbol'
+  map global object e '<a-semicolon>lsp-object Function Method<ret>' -docstring 'LSP function or method'
+  map global object k '<a-semicolon>lsp-object Class Interface Struct<ret>' -docstring 'LSP class interface or struct'
+  map global object d '<a-semicolon>lsp-diagnostic-object --include-warnings<ret>' -docstring 'LSP errors and warnings'
+  map global object D '<a-semicolon>lsp-diagnostic-object<ret>' -docstring 'LSP errors'
+
+  # load lsp for supported filetypes
+  set-option global lsp_cmd "kak-lsp -s %val{session} -vvv --log /tmp/kak-lsp.log"
+  hook global WinSetOption filetype=(rust|python|go|javascript|typescript|c|cpp|zig|dart|ruby) %{
+    lsp-enable-window
+    # lsp-auto-hover-enable
+    map global user l ': enter-user-mode lsp<ret>' -docstring 'lsp mode'
+    map global user h ': enter-user-mode lsp<ret>h' -docstring 'lsp help'
+    map global user a ': enter-user-mode lsp<ret>a' -docstring 'lsp code action'
+    set-option global lsp_hover_anchor false
+  }
+
+  hook global KakEnd .* lsp-exit
+}
+
+
+# -----------------
+# Other Plugins
+# -----------------
+
+map global goto f '<esc>:prompt -shell-script-candidates %{ fd --type f --hidden } file: %{ edit %val{text} }<ret>' -docstring "file"
+map global goto b '<esc>:prompt -buffer-completion buffer: %{ buffer %val{text} }<ret>' -docstring "buffer"
+
+# Fzf Plugin 
+plug "andreyorst/fzf.kak" config %{
+    # map global user f ':fzf-mode<ret>v' -docstring 'fzf file in project'
+    map global user b ':fzf-mode<ret>b' -docstring 'fzf current buffers'
+
+    map global user / ':fzf-mode<ret>g' -docstring 'fzf search in project'
+
+    # def fzf_file %{
+    #     evaluate-commands %sh{
+    #        printf "%s\n" ":fzf-mode<ret><esc>:fzf -items-cmd fd<ret>"
+    #    }
+    # }
+
+# Change FZF colors
+# FZF_DEFAULT_OPTS=" \
+# --color=bg+:#313244,bg:#1e1e2e,spinner:#f5e0dc,hl:#f38ba8 \
+# --color=fg:#cdd6f4,header:#f38ba8,info:#cba6f7,pointer:#f5e0dc \
+# --color=marker:#f5e0dc,fg+:#cdd6f4,prompt:#cba6f7,hl+:#f38ba8"
+}
+
+
+
+plug "alexherbo2/auto-pairs.kak" %{
+    enable-auto-pairs
+}
+
+plug "https://github.com/h-youhei/kakoune-surround"
+
+map global normal <c-m> ':surround<ret>'
+
+# Custom scripts
+source "~/.config/kak/rc/fzf_git.kak"
diff --git a/dotfiles/kak/rc/fzf_git.kak b/dotfiles/kak/rc/fzf_git.kak
new file mode 100644
index 0000000..df816dc
--- /dev/null
+++ b/dotfiles/kak/rc/fzf_git.kak
@@ -0,0 +1,60 @@
+
+define-command fzzf -params .. %{ evaluate-commands %sh{
+
+    while [ $# -gt 0 ]; do
+        case $1 in
+            (-items-cmd)    shift; items_cmd="$1"  ;;
+        esac
+        shift
+    done
+
+    # fzf_tmp=$(mktemp -d "${TMPDIR:-/tmp}"/fzfgit.kak.XXXXXX)
+    # fzfcmd="${fzf_tmp}/fzfcmd"
+    # result="${fzf_tmp}/result"
+
+    # (
+    #     shell_path="$(command -v sh)"
+    #     if [ -n "${shell_path}" ]; then
+    #         # portable shebang
+    #         printf "%s\n" "#!${shell_path}"
+    #         # set SHELL because fzf preview uses it
+    #         printf "%s\n" "SHELL=${shell_path}"
+    #     fi
+    #     # compose entire fzf command with all args into single file which will be executed later
+    #     # printf "%s\n" "export FZF_DEFAULT_OPTS=\"${kak_opt_fzf_default_opts:-}\""
+    #     printf "%s\n" "cd \"${PWD}\" && $items_cmd | fzf > $result"
+    #     printf "%s\n" "evaluate-commands -client ${kak_client} edit -existing $file" | kak -p "${kak_session}"
+    #     printf "%s\n" "rm ${fzfcmd}"
+    #     printf "%s\n" "fg"
+    # ) >> "${fzfcmd}"
+    # chmod 755 "${fzfcmd}"
+
+    kill -TSTP $kak_client_pid
+    cd `pwd` && $items_cmd | \
+    fzf | \
+    xargs printf "evaluate-commands -client ${kak_client} edit -existing %s\n" | \
+    kak -p
+    fg
+
+    # cmd="terminal $fzfcmd"
+
+    # Tells kakoune to open a terminal and run $fzfcmd
+    # printf "%s\n" "$fzfcmd"
+
+    # (   while [ -e "${fzfcmd}" ]; do sleep 0.1; done
+    #     # printf "%s\n" "evaluate-commands -client ${kak_client} edit -existing ~/out.txt" | kak -p "${kak_session}"
+    #     if [ -s "${result}" ]; then
+    #         file=$(cat $result)
+    #         printf "%s\n" "evaluate-commands -client ${kak_client} edit -existing $file" | kak -p "${kak_session}"
+
+    #     fi
+    #     rm -rf $fzf_temp
+    # ) > /dev/null 2>&1 < /dev/null &
+
+    # Bring kakoune back into the foreground
+}}
+
+# define-command fzf-project %{ fzzf -items-cmd 'fd -tfile' }
+
+# map global user f ':fzf-project<ret>' -docstring 'fzf current project'
+
diff --git a/dotfiles/keepassxc/keepassxc.ini b/dotfiles/keepassxc/keepassxc.ini
index a2ca54b..7973d0c 100644
--- a/dotfiles/keepassxc/keepassxc.ini
+++ b/dotfiles/keepassxc/keepassxc.ini
@@ -17,5 +17,5 @@ QuietSuccess=true
 [PasswordGenerator]
 AdditionalChars=
 ExcludedChars=
-Length=20
+Length=25
 SpecialChars=false
diff --git a/dotfiles/mako/config b/dotfiles/mako/config
new file mode 100644
index 0000000..ae4922a
--- /dev/null
+++ b/dotfiles/mako/config
@@ -0,0 +1,23 @@
+font=UbuntuMono 12.5
+
+background-color=#404552
+text-color=#e5e9f0
+width=315
+height=200
+padding=10
+margin=10
+progress-color=over #eceff480
+icon-path=/usr/share/icons/Arc-X-D
+max-icon-size=70
+layer=overlay
+
+border-size=5
+border-radius=0
+border-color=#5294e2
+
+default-timeout=5000
+
+[urgency=high]
+
+ignore-timeout=1
+
diff --git a/dotfiles/waybar/scripts/power-menu.sh b/dotfiles/waybar/scripts/power-menu.sh
index edaa5d6..02fb20f 100755
--- a/dotfiles/waybar/scripts/power-menu.sh
+++ b/dotfiles/waybar/scripts/power-menu.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 
 entries="Logout Suspend Reboot Shutdown"
 
diff --git a/flake.lock b/flake.lock
index 8b4ed22..50cfd9a 100644
--- a/flake.lock
+++ b/flake.lock
@@ -1,43 +1,5 @@
 {
   "nodes": {
-    "firefox-addons": {
-      "inputs": {
-        "flake-utils": "flake-utils",
-        "nixpkgs": [
-          "nixpkgs"
-        ]
-      },
-      "locked": {
-        "dir": "pkgs/firefox-addons",
-        "lastModified": 1702612985,
-        "narHash": "sha256-dnlw/lHJO2Fk/jUHzkz4dYKHF4nQxmHps9Jx8zldoo4=",
-        "owner": "rycee",
-        "repo": "nur-expressions",
-        "rev": "ae18cb76153e8dda888a313daac932ba358002ae",
-        "type": "gitlab"
-      },
-      "original": {
-        "dir": "pkgs/firefox-addons",
-        "owner": "rycee",
-        "repo": "nur-expressions",
-        "type": "gitlab"
-      }
-    },
-    "flake-utils": {
-      "locked": {
-        "lastModified": 1629284811,
-        "narHash": "sha256-JHgasjPR0/J1J3DRm4KxM4zTyAj4IOJY8vIl75v/kPI=",
-        "owner": "numtide",
-        "repo": "flake-utils",
-        "rev": "c5d161cc0af116a2e17f54316f0bf43f0819785c",
-        "type": "github"
-      },
-      "original": {
-        "owner": "numtide",
-        "repo": "flake-utils",
-        "type": "github"
-      }
-    },
     "home-manager": {
       "inputs": {
         "nixpkgs": [
@@ -45,11 +7,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1702538064,
-        "narHash": "sha256-At5GwJPu2tzvS9dllhBoZmqK6lkkh/sOp2YefWRlaL8=",
+        "lastModified": 1702735279,
+        "narHash": "sha256-SztEzDOE/6bDNnWWvnRbSHPVrgewLwdSei1sxoZFejM=",
         "owner": "nix-community",
         "repo": "home-manager",
-        "rev": "0e2e443ff24f9d75925e91b89d1da44b863734af",
+        "rev": "e9b9ecef4295a835ab073814f100498716b05a96",
         "type": "github"
       },
       "original": {
@@ -90,12 +52,27 @@
         "type": "github"
       }
     },
+    "nur": {
+      "locked": {
+        "lastModified": 1702770334,
+        "narHash": "sha256-MVILxIF9ZVIk0f9w3yYZpy8auwxgey0MFzdoIFFvQNU=",
+        "owner": "nix-community",
+        "repo": "NUR",
+        "rev": "1d37444620523278aa163bb9e30104f5d1152061",
+        "type": "github"
+      },
+      "original": {
+        "owner": "nix-community",
+        "repo": "NUR",
+        "type": "github"
+      }
+    },
     "root": {
       "inputs": {
-        "firefox-addons": "firefox-addons",
         "home-manager": "home-manager",
         "nixpkgs": "nixpkgs",
-        "nixpkgs-stable": "nixpkgs-stable"
+        "nixpkgs-stable": "nixpkgs-stable",
+        "nur": "nur"
       }
     }
   },
diff --git a/flake.nix b/flake.nix
index ef896b4..33b790d 100644
--- a/flake.nix
+++ b/flake.nix
@@ -6,18 +6,20 @@
 
     nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-23.11";
 
+    nur.url = "github:nix-community/NUR";
+
     home-manager = {
         url = "github:nix-community/home-manager";
         inputs.nixpkgs.follows = "nixpkgs";
     };
 
-    firefox-addons = {
-        url = "gitlab:rycee/nur-expressions?dir=pkgs/firefox-addons";
-        inputs.nixpkgs.follows = "nixpkgs";
-    };
+    # firefox-addons = {
+    #     url = "gitlab:rycee/nur-expressions?dir=pkgs/firefox-addons";
+    #     inputs.nixpkgs.follows = "nixpkgs";
+    # };
   };
 
-  outputs = { self, nixpkgs, nixpkgs-stable, home-manager, ... } @ inputs:
+  outputs = { self, nixpkgs, nixpkgs-stable, nur, home-manager, ... } @ inputs:
   let
     inherit (self) outputs;
     system = "x86_64-linux";
@@ -37,6 +39,7 @@
       nixServer = nixpkgs.lib.nixosSystem {
         specialArgs = { inherit inputs; };
         modules = [
+           # nixpkgs.overlays = [ nur.overlay ];
           ./nixos/server_configuration.nix
           inputs.home-manager.nixosModules.default
         ];
diff --git a/modules/apps/firefox/firefox.nix b/modules/apps/firefox/firefox.nix
new file mode 100644
index 0000000..0f4758b
--- /dev/null
+++ b/modules/apps/firefox/firefox.nix
@@ -0,0 +1,63 @@
+{lib, config, pkgs, inputs, ...}:
+let
+  cfg = config.firefoxApp;
+in
+{
+    # imports = [
+    #     inputs.nur.hmModules.nur
+    # ];
+
+    options.firefoxApp = {
+        enable = lib.mkEnableOption "enable firefox browser";
+    };
+    config = lib.mkIf cfg.enable {
+        programs.firefox = {
+            enable = true;
+            profiles = {
+                default = {
+                    id = 0;
+                    name = "default";
+                    isDefault = true;
+                    extensions = with pkgs; [
+                        nur.repos.rycee.firefox-addons.darkreader
+                        nur.repos.rycee.firefox-addons.keepassxc-browser
+                        nur.repos.crazazy.firefox-addons.ublock-origin
+                    ];
+                    search = {
+                        # Replace default firefox search engine config with this one
+                        force = true;
+                        default = "Startpage";
+                        engines = {
+                            "Startpage" = {
+                                urls = [{
+                                    template = "https://www.startpage.com/sp/search?query={searchTerms}";
+                                }];
+                            };
+                        };
+                    };
+                    settings = {
+                       "browser.startup.blankWindow" = true;
+                       "browser.startup.homepage" = "about:blank";
+                       "browser.search.region" = "US";
+                       "browser.search.isUS" = true;
+                       "distribution.searchplugins.defaultLocale" = "en-US";
+                       "general.useragent.locale" = "en-US";
+                       "extensions.activeThemeID" = "{831b8843-7251-4306-9521-e688f18b4aeb}";
+                       "privacy.trackingprotection.enable" = true;
+                       "privacy.trackingprotection.emailtracking.enable" = true;
+                       "privacy.trackingprotection.socialtracking.enable" = true;
+                       "privacy.clearOnShutdown.cookies" = true;
+                       "browser.safebrowsing.passwords.enabled" = false;
+                       "browser.migrate.interactions.passwords" = false;
+                       "pref.privacy.disable_button.view_passwords" = false;
+                        # "browser.bookmarks.showMobileBookmarks" = true;
+                       # "browser.newtabpage.pinned" = [{
+                       #   title = "NixOS";
+                       #   url = "https://nixos.org";
+                       # }];
+                   };
+                };
+            };
+        };
+    };
+}
diff --git a/modules/home-manager/home.nix b/modules/home-manager/home.nix
index fda6f86..49407d2 100644
--- a/modules/home-manager/home.nix
+++ b/modules/home-manager/home.nix
@@ -4,8 +4,15 @@
   # manage.
   #
 
+  # nixpkgs.overlays = [
+  #   inputs.nur.overlay
+  # ];
+
   # nixpkgs.config.allowUnfree = true;
   # inputs.nixpkgs-stable.config.allowUnfree = true;
+  imports = [
+      ../apps/firefox/firefox.nix
+  ];
   
   home.username = userName;
   home.homeDirectory = "/home/${userName}";
@@ -16,29 +23,20 @@
 
   # The home.packages option allows you to install Nix packages into your
   # environment.
+  firefoxApp.enable = true;
   fonts.fontconfig.enable = true;
   home.packages = with pkgs; [
-    bat
-    inputs.nixpkgs-stable.legacyPackages.x86_64-linux.corectrl
-    fd
-    firefox
-    foot
-    fzf
-    htop
-    kakoune
+    # nur.repos.crazazy.js.eslint
+    # inputs.nixpkgs-stable.legacyPackages.x86_64-linux.corectrl
+    # kakoune
     keepassxc
-    libnotify
-    mako
-    networkmanagerapplet
     obs-studio
     signal-desktop
-    # steam
     waybar
     wofi
     xfce.thunar
     # Install fonts
     (nerdfonts.override { fonts = [ "Hermit" "Overpass" ]; })
-    overpass
 
     # # You can also create simple shell scripts directly inside your
     # # configuration. For example, this adds a command 'my-hello' to your
@@ -83,6 +81,7 @@
   #
   home.sessionVariables = {
     EDITOR = "kak";
+    XDG_CURRENT_DESKTOP="sway";
   };
 
   wayland.windowManager.sway = {
@@ -121,6 +120,26 @@
           plugins = [ "git" ];
           theme = "half-life";
       };
+      initExtra = ''
+          alias ask="nix-shell -p python310Packages.openai --run 'python ~/source/python/chat.py'"
+
+          fzf_projects() {
+              DIR=`
+              fd .git --search-path="$HOME/source/" -H --ignore-file ~/.config/fd-ignore -tdirectory | \
+              xargs dirname | \
+              sed 's|$HOME||g' | \
+              sort | \
+              uniq | \
+              fzf --preview 'ls $HOME/{}/README.md 2>/dev/null && bat $HOME/{}/README.md || printf "No README.md file found in this directory\n%s" {}' --preview-window=top | \
+              xargs printf "$HOME/%s/"
+              `
+              cd $DIR
+          }
+          alias p="fzf_projects source/"
+
+          ### Busykid Bash Functions
+
+       '';
   };
 
 }
diff --git a/modules/sway/sway_conf.nix b/modules/sway/sway_conf.nix
index 8845c5c..3ac499b 100644
--- a/modules/sway/sway_conf.nix
+++ b/modules/sway/sway_conf.nix
@@ -19,6 +19,10 @@
 
     };
 
+    ###
+    ##  Configuration
+    ###
+
     config = lib.mkIf config.swaywm.enable {
 
         nixpkgs.config.allowUnfree = config.swaywm.useNonFree;
@@ -48,9 +52,15 @@
         ###
         environment.systemPackages = with pkgs; lib.lists.flatten [
              [
+                bash
+                foot
                 git
                 glib # gsettings
                 grim
+                libnotify
+                mako
+                ncspot
+                networkmanagerapplet
                 pavucontrol
                 slurp
                 swaylock
@@ -58,14 +68,8 @@
                 wl-clipboard
                 xdg-utils
                 zsh
-                # Add to gaming only installs
-                lutris
-                wine-wayland
-                # Video utils
-                davinci-resolve-studio
-                imv
-                mpv
-                gimp
+                # Fonts
+
              ]
             config.swaywm.systemPackages
             # (lib.mkIf config.swaywm.installGaming [
@@ -90,17 +94,6 @@
         # kdeconnect setup
         programs.kdeconnect.enable = true;
 
-        # Firewall
-        # networking.firewall = {
-        #   enable = true;
-        #   allowedTCPPortRanges = [
-        #       {from = 1714; to = 1764;} # KDE Connnect
-        #   ];
-        #   allowedUDPPortRanges = [
-        #       {from = 1714; to = 1764;} # KDE Connnect
-        #   ];
-        # };
-
         ###
         ##  Misc
         ###
diff --git a/modules/user/main_user.nix b/modules/user/main_user.nix
index efced75..a2489b7 100644
--- a/modules/user/main_user.nix
+++ b/modules/user/main_user.nix
@@ -44,6 +44,8 @@ in
                     cfg.userName
                     "video"
                     "audio"
+                    # For android
+                    "adbusers"
                 ];
             })
         ];
diff --git a/nixos/desktop_configuration.nix b/nixos/desktop_configuration.nix
index f96533d..e2c0b39 100644
--- a/nixos/desktop_configuration.nix
+++ b/nixos/desktop_configuration.nix
@@ -12,10 +12,15 @@ in
     }
   ];
 
+  nixpkgs.overlays = [
+    inputs.nur.overlay
+  ];
+
   imports = [ # Include the results of the hardware scan.
     ./hardware-configuration.nix
     ../modules/user/main_user.nix
     ../modules/sway/sway_conf.nix
+    # inputs.nur.hmModules.nur
   ];
 
   # Enable flakes feature
@@ -44,10 +49,54 @@ in
       enable = desktop == "sway";
       useNonFree = true;
       installGaming = gaming;
-      systemPackages = [
-        pkgs.libreoffice
+      systemPackages = with pkgs; [
+        # Dev Tools
+        dbeaver
+        cargo
+        kakoune
+        # flutter
+        docker
+        docker-compose
+        python310
+        nodejs_21
+        ### LSP's
+        rnix-lsp # Nix LSP
+        nodePackages.typescript-language-server
+        vscode-langservers-extracted # provides eslint, markdown, json, css, and html lsp
+        rubyPackages.solargraph
+        python310Packages.python-lsp-server
+        ### Misc
+        # android-udev-rules
+        # android-tools
+        # sdkmanager
+
+        # Productivity
+        libreoffice
+
+        # Gaming
+        wine-wayland
+
+        # Better Unix
+        bat
+        duf
+        fd
+        fzf
+        lsd
+        ripgrep
+        gtop
+
+        # Photo / Video
+        davinci-resolve-studio
+        imv
+        mpv
+        gimp
+
+        # Work
+        slack
       ];
   };
+
+  programs.adb.enable = true;
  
   system.stateVersion = "23.11"; # Did you read the comment?
 }