From 379f6725862e28acb0fd209ceee0131560e2052e Mon Sep 17 00:00:00 2001 From: Nate Anderson Date: Mon, 18 Dec 2023 20:12:41 -0700 Subject: [PATCH] Updated kak, firefox, etc --- dotfiles/Passwords.kdbx | Bin 0 -> 62853 bytes dotfiles/kak-lsp/kak-lsp.toml | 447 +++++++++++++++++++ dotfiles/kak/colors/catppuccin_frappe.kak | 83 ++++ dotfiles/kak/colors/catppuccin_latte.kak | 83 ++++ dotfiles/kak/colors/catppuccin_macchiato.kak | 83 ++++ dotfiles/kak/colors/catppuccin_mocha.kak | 83 ++++ dotfiles/kak/kakrc | 252 +++++++++++ dotfiles/kak/rc/fzf_git.kak | 60 +++ dotfiles/keepassxc/keepassxc.ini | 2 +- dotfiles/mako/config | 23 + dotfiles/waybar/scripts/power-menu.sh | 2 +- flake.lock | 63 +-- flake.nix | 13 +- modules/apps/firefox/firefox.nix | 63 +++ modules/home-manager/home.nix | 45 +- modules/sway/sway_conf.nix | 31 +- modules/user/main_user.nix | 2 + nixos/desktop_configuration.nix | 53 ++- 18 files changed, 1304 insertions(+), 84 deletions(-) create mode 100644 dotfiles/Passwords.kdbx create mode 100644 dotfiles/kak-lsp/kak-lsp.toml create mode 100644 dotfiles/kak/colors/catppuccin_frappe.kak create mode 100644 dotfiles/kak/colors/catppuccin_latte.kak create mode 100644 dotfiles/kak/colors/catppuccin_macchiato.kak create mode 100644 dotfiles/kak/colors/catppuccin_mocha.kak create mode 100644 dotfiles/kak/kakrc create mode 100644 dotfiles/kak/rc/fzf_git.kak create mode 100644 dotfiles/mako/config create mode 100644 modules/apps/firefox/firefox.nix diff --git a/dotfiles/Passwords.kdbx b/dotfiles/Passwords.kdbx new file mode 100644 index 0000000000000000000000000000000000000000..8261ecff8c2c6409f23692efd007ba7caed4dc6a GIT binary patch literal 62853 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�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/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 -docstring 'same as [f] but in the other direction' +map global normal -docstring 'same as [t] but in the other direction' +map global normal -docstring 'select to beginning of line' +map global normal -docstring 'select to end of line' +map global normal -docstring 'split selections on line boundaries' +map global normal -docstring 'select first and last character of each selection' +map global normal '' '' -docstring 'flip direction of each selection' +map global normal -docstring 'ensure selections are in forward direction (cursor then anchor)' +map global normal -docstring 'clear the main selection' + +# Scrolling remap +map global normal -docstring 'Scroll screen up' +map global normal -docstring 'Scroll screen down' + +map global normal ':comment-line' -docstring 'comment selected lines' + +# Ctrl-s to save +map global normal ':w' -docstring 'write buffer' +# Ctrl-x to save and exit +map global normal ':w:db' -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' -docstring 'prev buffer' +map global normal ) ': buffer-next' -docstring 'next buffer' + +# map global normal [ ( -docstring 'rotate main selection' + +# map global normal ] ) -docstring 'rotate main selection backwards' +# Make x select lines up and down +def -params 1 extend-line-down %{ + exec "%arg{1}J" +} + +def -params 1 extend-line-up %{ + exec "%arg{1}K" + try %{ + exec -draft ';\n' + exec X + } + exec '' +} + + +map global normal x ':extend-line-down %val{count}' +map global normal X ':extend-line-up %val{count}' + +map global normal k n -docstring 'next result' +map global normal K N -docstring 'next result add selection' + +map global normal -docstring 'prev result' +map global normal -docstring 'prev result add selection' + +map global insert -docstring 'next completion' +map global insert -docstring 'prev completion' + +# User Mode Bindings +# Accessed with +declare-user-mode git +map global user g ': enter-user-mode git' -docstring "Git mode" +map global user p 'wl-paste -n' -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}" -docstring 'open kakrc' +map global user z ":edit %opt{shell_config}" -docstring 'open shell config' +map global user S ":edit %opt{sway_conf_path}" -docstring 'open wm config' +# Git Mode Bindings +map global git d ':git show-diff' -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 ':try lsp-snippets-select-next-placeholders catch %{ execute-keys -with-hooks tab> }' -docstring 'Select next snippet placeholder' + map global object a 'lsp-object' -docstring 'LSP any symbol' + map global object 'lsp-object' -docstring 'LSP any symbol' + map global object e 'lsp-object Function Method' -docstring 'LSP function or method' + map global object k 'lsp-object Class Interface Struct' -docstring 'LSP class interface or struct' + map global object d 'lsp-diagnostic-object --include-warnings' -docstring 'LSP errors and warnings' + map global object D 'lsp-diagnostic-object' -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' -docstring 'lsp mode' + map global user h ': enter-user-mode lsph' -docstring 'lsp help' + map global user a ': enter-user-mode lspa' -docstring 'lsp code action' + set-option global lsp_hover_anchor false + } + + hook global KakEnd .* lsp-exit +} + + +# ----------------- +# Other Plugins +# ----------------- + +map global goto f ':prompt -shell-script-candidates %{ fd --type f --hidden } file: %{ edit %val{text} }' -docstring "file" +map global goto b ':prompt -buffer-completion buffer: %{ buffer %val{text} }' -docstring "buffer" + +# Fzf Plugin +plug "andreyorst/fzf.kak" config %{ + # map global user f ':fzf-modev' -docstring 'fzf file in project' + map global user b ':fzf-modeb' -docstring 'fzf current buffers' + + map global user / ':fzf-modeg' -docstring 'fzf search in project' + + # def fzf_file %{ + # evaluate-commands %sh{ + # printf "%s\n" ":fzf-mode:fzf -items-cmd fd" + # } + # } + +# 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 ':surround' + +# 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' -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? }