mirror of
https://github.com/kogakure/dotfiles.git
synced 2026-02-03 20:25:30 +00:00
feat(nix): move Nix configuration to root level
This commit is contained in:
32
home/ack/ack
Normal file
32
home/ack/ack
Normal file
@@ -0,0 +1,32 @@
|
||||
# group the results by file
|
||||
--group
|
||||
|
||||
# only search case-sensitiv with mixed case
|
||||
--smart-case
|
||||
|
||||
# follow symlinks
|
||||
--follow
|
||||
|
||||
# Colorful output
|
||||
--color
|
||||
|
||||
# Ignore directories
|
||||
--ignore-dir=vendor
|
||||
--ignore-dir=log
|
||||
--ignore-dir=tmp
|
||||
--ignore-dir=gems
|
||||
--ignore-dir=node_modules
|
||||
--ignore-dir=bower_components
|
||||
|
||||
# Add file types
|
||||
--type-set=css=.css,.less,.scss,.styl
|
||||
--type-set=html=.html,.mustache,.handlebars,.tmpl
|
||||
--type-set=json=.json
|
||||
--type-set=less=.less
|
||||
--type-set=md=.markdown,.md
|
||||
--type-set=sass=.sass,.scss
|
||||
--type-set=styl=.styl
|
||||
--type-set=style=.scss,.sass,.styl,.less,.css
|
||||
--type-set=svg=.svg
|
||||
--type-set=ts=.ts
|
||||
|
||||
9
home/ack/default.nix
Normal file
9
home/ack/default.nix
Normal file
@@ -0,0 +1,9 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
home.file.".ack" = {
|
||||
source = ./ack;
|
||||
};
|
||||
|
||||
home.packages = [ pkgs.ack ];
|
||||
}
|
||||
4
home/ag/ag
Normal file
4
home/ag/ag
Normal file
@@ -0,0 +1,4 @@
|
||||
# Ignore files and folders
|
||||
log
|
||||
tags
|
||||
tmp
|
||||
9
home/ag/default.nix
Normal file
9
home/ag/default.nix
Normal file
@@ -0,0 +1,9 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
home.file.".ag" = {
|
||||
source = ./ag;
|
||||
};
|
||||
|
||||
home.packages = [ pkgs.silver-searcher ];
|
||||
}
|
||||
1
home/asdf/asdfrc
Normal file
1
home/asdf/asdfrc
Normal file
@@ -0,0 +1 @@
|
||||
legacy_version_file = yes
|
||||
3
home/asdf/default-gems
Normal file
3
home/asdf/default-gems
Normal file
@@ -0,0 +1,3 @@
|
||||
bundler
|
||||
erb_lint
|
||||
neovim
|
||||
13
home/asdf/default-npm-packages
Normal file
13
home/asdf/default-npm-packages
Normal file
@@ -0,0 +1,13 @@
|
||||
browser-sync
|
||||
caniuse-cmd
|
||||
commitizen
|
||||
cz-conventional-changelog
|
||||
fast-cli
|
||||
json-server
|
||||
jsonlint
|
||||
lighthouse
|
||||
neovim
|
||||
pageres-cli
|
||||
trash-cli
|
||||
unlighthouse
|
||||
yarn
|
||||
9
home/asdf/default-python-packages
Normal file
9
home/asdf/default-python-packages
Normal file
@@ -0,0 +1,9 @@
|
||||
autopep8
|
||||
black
|
||||
codespell
|
||||
flake8
|
||||
gitlint
|
||||
pipenv
|
||||
proselint
|
||||
neovim-remote
|
||||
pyautogui
|
||||
14
home/asdf/default.nix
Normal file
14
home/asdf/default.nix
Normal file
@@ -0,0 +1,14 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
home.file = {
|
||||
".asdfrc" = { source = ./asdfrc; };
|
||||
".tool-versions" = { source = ./tool-versions; };
|
||||
".default-gems" = { source = ./default-gems; };
|
||||
".default-npm-packages" = { source = ./default-npm-packages; };
|
||||
".default-python-packages" = { source = ./default-python-packages; };
|
||||
".asdf/lib".source = "${pkgs.asdf-vm}/share/asdf-vm/lib";
|
||||
};
|
||||
|
||||
home.packages = [ pkgs.asdf-vm ];
|
||||
}
|
||||
9
home/asdf/tool-versions
Normal file
9
home/asdf/tool-versions
Normal file
@@ -0,0 +1,9 @@
|
||||
neovim stable
|
||||
nodejs 18.17.1
|
||||
ruby 3.2.2
|
||||
python 3.9.9 3.10.9
|
||||
rust 1.78.0
|
||||
deno 1.27.0
|
||||
lua 5.1
|
||||
golang 1.20
|
||||
direnv 2.32.2
|
||||
21
home/bash/default.nix
Normal file
21
home/bash/default.nix
Normal file
@@ -0,0 +1,21 @@
|
||||
{ ... }:
|
||||
|
||||
{
|
||||
programs.bash = {
|
||||
enable = true;
|
||||
enableCompletion = true;
|
||||
shellOptions = [
|
||||
"histappend"
|
||||
"checkwinsize"
|
||||
"extglob"
|
||||
"globstar"
|
||||
"checkjobs"
|
||||
];
|
||||
historyControl = [
|
||||
"erasedups"
|
||||
"ignorespace"
|
||||
];
|
||||
historyFileSize = 100000;
|
||||
historySize = 10000;
|
||||
};
|
||||
}
|
||||
65
home/bat/default.nix
Normal file
65
home/bat/default.nix
Normal file
@@ -0,0 +1,65 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
programs.bat = {
|
||||
enable = true;
|
||||
config = {
|
||||
italic-text = "always";
|
||||
map-syntax = [
|
||||
".*ignore:Git Ignore"
|
||||
".gitconfig.local:Git Config"
|
||||
"flake.lock:JSON"
|
||||
];
|
||||
pager = "less -FR";
|
||||
style = "numbers,changes,header,grid";
|
||||
theme = "catppuccin-mocha";
|
||||
wrap = "never";
|
||||
};
|
||||
extraPackages = with pkgs.bat-extras; [
|
||||
batdiff # Diff a file against the current git index, or display the diff between two files.
|
||||
batgrep # Quickly search through and highlight files using ripgrep.
|
||||
batman # Read system manual pages (man) using bat as the manual page formatter.
|
||||
batpipe # A less (and soon bat) preprocessor for viewing more types of files in the terminal.
|
||||
batwatch # Watch for changes in files or command output, and print them with bat.
|
||||
prettybat # Pretty-print source code and highlight it with bat.
|
||||
];
|
||||
themes = {
|
||||
catppuccin-mocha = {
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "catppuccin";
|
||||
repo = "bat";
|
||||
rev = "d714cc1d358ea51bfc02550dabab693f70cccea0";
|
||||
sha256 = "sha256-Q5B4NDrfCIK3UAMs94vdXnR42k4AXCqZz6sRn8bzmf4=";
|
||||
};
|
||||
file = "themes/Catppuccin Mocha.tmTheme";
|
||||
};
|
||||
catppuccin-frappe = {
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "catppuccin";
|
||||
repo = "bat";
|
||||
rev = "d714cc1d358ea51bfc02550dabab693f70cccea0";
|
||||
sha256 = "sha256-Q5B4NDrfCIK3UAMs94vdXnR42k4AXCqZz6sRn8bzmf4=";
|
||||
};
|
||||
file = "themes/Catppuccin Frappe.tmTheme";
|
||||
};
|
||||
catppuccin-latte = {
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "catppuccin";
|
||||
repo = "bat";
|
||||
rev = "d714cc1d358ea51bfc02550dabab693f70cccea0";
|
||||
sha256 = "sha256-Q5B4NDrfCIK3UAMs94vdXnR42k4AXCqZz6sRn8bzmf4=";
|
||||
};
|
||||
file = "themes/Catppuccin Latte.tmTheme";
|
||||
};
|
||||
catppuccin-macchiato = {
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "catppuccin";
|
||||
repo = "bat";
|
||||
rev = "d714cc1d358ea51bfc02550dabab693f70cccea0";
|
||||
sha256 = "sha256-Q5B4NDrfCIK3UAMs94vdXnR42k4AXCqZz6sRn8bzmf4=";
|
||||
};
|
||||
file = "themes/Catppuccin Macchiato.tmTheme";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
44
home/ctags/ctags
Normal file
44
home/ctags/ctags
Normal file
@@ -0,0 +1,44 @@
|
||||
--recurse=yes
|
||||
|
||||
--exclude=.git
|
||||
--exclude=db/*
|
||||
--exclude=log/*
|
||||
--exclude=tmp/*
|
||||
--exclude=vendor/*
|
||||
--exclude=gems
|
||||
--exclude=node_modules/*
|
||||
--exclude=public/assets/frontend/*
|
||||
--exclude=public/assets/frontend_minified/*
|
||||
--exclude=central_sitemap_application/vendor/*
|
||||
|
||||
--langdef=css
|
||||
--langmap=css:.css
|
||||
--langmap=css:+.scss
|
||||
--langmap=css:+.sass
|
||||
--langmap=css:+.styl
|
||||
--langmap=css:+.less
|
||||
--regex-css=/^[ \t]*#([A-Za-z0-9_-]+)/#\1/i,id,ids/
|
||||
--regex-css=/^[ \t]*(([A-Za-z0-9_-]+[ \t\n,]+)+)\{/\1/t,tag,tags/
|
||||
--regex-css=/^[ \t]*@media\s+([A-Za-z0-9_-]+)/\1/m,media,medias/
|
||||
--regex-css=/^[ \t]+\.([A-Za-z0-9_-]+) *[,{]/\1/c,class,classes/
|
||||
--regex-css=/^([A-Za-z0-9_-]*)*\.([A-Za-z0-9_-]+) *[,{]/\2/c,class,classes/
|
||||
|
||||
--langdef=js
|
||||
--langmap=js:.js
|
||||
--regex-js=/(,|(;|^)[ \t]*(var|let|([A-Za-z_$][A-Za-z0-9_$.]+\.)*))[ \t]*([A-Za-z0-9_$]+)[ \t]*=[ \t]*\{/\5/,object/
|
||||
--regex-js=/(,|(;|^)[ \t]*(var|let|([A-Za-z_$][A-Za-z0-9_$.]+\.)*))[ \t]*([A-Za-z0-9_$]+)[ \t]*=[ \t]*function[ \t]*\(/\5/,function/
|
||||
--regex-js=/(,|(;|^)[ \t]*(var|let|([A-Za-z_$][A-Za-z0-9_$.]+\.)*))[ \t]*([A-Za-z0-9_$]+)[ \t]*=[ \t]*\[/\5/,array/
|
||||
--regex-js=/(,|(;|^)[ \t]*(var|let|([A-Za-z_$][A-Za-z0-9_$.]+\.)*))[ \t]*([A-Za-z0-9_$]+)[ \t]*=[ \t]*[^"]'[^']*/\5/,string/
|
||||
--regex-js=/(,|(;|^)[ \t]*(var|let|([A-Za-z_$][A-Za-z0-9_$.]+\.)*))[ \t]*([A-Za-z0-9_$]+)[ \t]*=[ \t]*(true|false)/\5/,boolean/
|
||||
--regex-js=/(,|(;|^)[ \t]*(var|let|([A-Za-z_$][A-Za-z0-9_$.]+\.)*))[ \t]*([A-Za-z0-9_$]+)[ \t]*=[ \t]*[0-9]+/\5/,number/
|
||||
--regex-js=/(,|(;|^)[ \t]*(var|let|([A-Za-z_$][A-Za-z0-9_$.]+\.)*))[ \t]*([A-Za-z0-9_$]+)[ \t]*=[ \t]*.+([,;=]|$)/\5/,variable/
|
||||
--regex-js=/(,|(;|^)[ \t]*(var|let|([A-Za-z_$][A-Za-z0-9_$.]+\.)*))[ \t]*([A-Za-z0-9_$]+)[ \t]*[ \t]*([,;]|$)/\5/,variable/
|
||||
--regex-js=/function[ \t]+([A-Za-z0-9_$]+)[ \t]*\([^)]*\)/\1/,function/
|
||||
--regex-js=/(,|^)[ \t]*([A-Za-z_$][A-Za-z0-9_$]+)[ \t]*:[ \t]*\{/\2/,object/
|
||||
--regex-js=/(,|^)[ \t]*([A-Za-z_$][A-Za-z0-9_$]+)[ \t]*:[ \t]*function[ \t]*\(/\2/,function/
|
||||
--regex-js=/(,|^)[ \t]*([A-Za-z_$][A-Za-z0-9_$]+)[ \t]*:[ \t]*\[/\2/,array/
|
||||
--regex-js=/(,|^)[ \t]*([A-Za-z_$][A-Za-z0-9_$]+)[ \t]*:[ \t]*[^"]'[^']*/\2/,string/
|
||||
--regex-js=/(,|^)[ \t]*([A-Za-z_$][A-Za-z0-9_$]+)[ \t]*:[ \t]*(true|false)/\2/,boolean/
|
||||
--regex-js=/(,|^)[ \t]*([A-Za-z_$][A-Za-z0-9_$]+)[ \t]*:[ \t]*[0-9]+/\2/,number/
|
||||
--regex-js=/(,|^)[ \t]*([A-Za-z_$][A-Za-z0-9_$]+)[ \t]*:[ \t]*[^=]+([,;]|$)/\2/,variable/
|
||||
|
||||
9
home/ctags/default.nix
Normal file
9
home/ctags/default.nix
Normal file
@@ -0,0 +1,9 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
home.file.".ctags" = {
|
||||
source = ./ctags;
|
||||
};
|
||||
|
||||
home.packages = [ pkgs.universal-ctags ];
|
||||
}
|
||||
8
home/curl/curlrc
Normal file
8
home/curl/curlrc
Normal file
@@ -0,0 +1,8 @@
|
||||
# Disguise as Googlebot
|
||||
# user-agent = "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
|
||||
|
||||
# When following a redirect, automatically set the previous URL as referer.
|
||||
referer = ";auto"
|
||||
|
||||
# Wait 60 seconds before timing out.
|
||||
connect-timeout = 60
|
||||
9
home/curl/default.nix
Normal file
9
home/curl/default.nix
Normal file
@@ -0,0 +1,9 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
home.file = {
|
||||
".curlrc" = { source = ./curlrc; };
|
||||
};
|
||||
|
||||
home.packages = [ pkgs.curl ];
|
||||
}
|
||||
202
home/default.nix
Normal file
202
home/default.nix
Normal file
@@ -0,0 +1,202 @@
|
||||
{ pkgs, config, lib, home-manager, ... }:
|
||||
|
||||
let
|
||||
isDarwin = pkgs.stdenv.isDarwin;
|
||||
in
|
||||
{
|
||||
# https://nix-community.github.io/home-manager/options.html
|
||||
imports = [
|
||||
./ack
|
||||
./ag
|
||||
./asdf
|
||||
./bash
|
||||
./bat
|
||||
./ctags
|
||||
./curl
|
||||
./direnv
|
||||
./editorconfig
|
||||
./fish
|
||||
./fzf
|
||||
./gh
|
||||
./gh-dash
|
||||
./git
|
||||
./gnupg
|
||||
./hammerspoon
|
||||
./karabiner
|
||||
./lazydocker
|
||||
./lazygit
|
||||
./lf
|
||||
./lsd
|
||||
./neovim
|
||||
./oatmeal
|
||||
./ripgrep
|
||||
./ruby
|
||||
./sesh
|
||||
./skhd
|
||||
./starship
|
||||
./tmux
|
||||
./wezterm
|
||||
./wget
|
||||
./yabai
|
||||
./yazi
|
||||
./zed
|
||||
./zoxide
|
||||
./zsh
|
||||
];
|
||||
|
||||
config = {
|
||||
home.stateVersion = "23.05";
|
||||
|
||||
home.activation = {
|
||||
# Install terminfo for wezterm
|
||||
installWeztermProfile = lib.hm.dag.entryAfter [ "writeBoundary" ] ''
|
||||
tempfile=$(mktemp) \
|
||||
&& ${pkgs.curl}/bin/curl -o $tempfile https://raw.githubusercontent.com/wez/wezterm/main/termwiz/data/wezterm.terminfo \
|
||||
&& tic -x -o ~/.terminfo $tempfile \
|
||||
&& rm $tempfile
|
||||
'';
|
||||
};
|
||||
|
||||
# Session Variables
|
||||
home.sessionVariables = {
|
||||
KEYTIMEOUT = 1;
|
||||
|
||||
# Man
|
||||
MANPATH = "/usr/local/man:$MANPATH";
|
||||
|
||||
# Editor
|
||||
EDITOR = "nvim";
|
||||
GIT_EDITOR = "nvim";
|
||||
|
||||
# Secretive
|
||||
SSH_AUTH_SOCK = "$HOME/Library/Containers/com.maxgoedjen.Secretive.SecretAgent/Data/socket.ssh";
|
||||
|
||||
# Volta
|
||||
VOLTA_HOME = "$HOME/.volta";
|
||||
|
||||
# Stable Diffusion
|
||||
# VIRTUAL_ENV = "$HOME/Code/AI/stable-diffusion-webui/venv";
|
||||
};
|
||||
|
||||
# Session Paths
|
||||
home.sessionPath = [
|
||||
# Personal scripts
|
||||
"$HOME/.dotfiles/private/bin"
|
||||
|
||||
# Homebrew
|
||||
"/opt/homebrew/bin"
|
||||
"/opt/homebrew/sbin"
|
||||
|
||||
# Misc
|
||||
"$HOME/.local/bin"
|
||||
"/usr/local/bin"
|
||||
"/usr/local/sbin"
|
||||
#
|
||||
# Rust
|
||||
"$HOME/.cargo/bin"
|
||||
|
||||
# Tmux plugins
|
||||
"$HOME/.tmux/plugins/tmux-nvr/bin"
|
||||
"$HOME/.tmux/plugins/t-smart-tmux-session-manager/bin"
|
||||
|
||||
# Volta
|
||||
"$VOLTA_HOME/bin"
|
||||
|
||||
# ASDF
|
||||
"$HOME/.asdf/shims"
|
||||
];
|
||||
|
||||
# Let Home Manager install and manage itself.
|
||||
programs.home-manager.enable = true;
|
||||
|
||||
# Write into ~/.config
|
||||
xdg.enable = true;
|
||||
|
||||
# TODO: First migrate all fonts
|
||||
# fonts.fontconfig.enable = true;
|
||||
|
||||
# The home.packages option allows you to install Nix packages into your
|
||||
# environment.
|
||||
home.packages = with pkgs; [
|
||||
atuin # Replacement for a shell history which records additional commands context with optional encrypted synchronization between machines
|
||||
bfg-repo-cleaner # Removes large or troublesome blobs in a git repository like git-filter-branch does, but faster
|
||||
btop # Monitor of resources
|
||||
bzip2 # High-quality data compression program
|
||||
cloc # Program that counts lines of source code
|
||||
comma # Comma runs software without installing it
|
||||
coreutils # GNU Core Utilities
|
||||
darwin.xattr # Display and manipulate extended attributes
|
||||
diff-so-fancy # Good-looking diffs filter for git
|
||||
docker # Pack, ship and run any application as a lightweight container
|
||||
docker-buildx # Docker CLI plugin for extended build capabilities with BuildKit
|
||||
dust # du + rust = dust. Like du but more intuitive
|
||||
exiftool # Tool to read, write and edit EXIF meta information
|
||||
eza # Modern, maintained replacement for ls
|
||||
fd # Simple, fast and user-friendly alternative to find
|
||||
ffmpeg_7 # Complete, cross-platform solution to record, convert and stream audio and video
|
||||
glow # Render markdown on the CLI, with pizzazz!
|
||||
gource # Software version control visualization tool
|
||||
grex # Command-line tool for generating regular expressions from user-provided test cases
|
||||
highlight # Source code highlighting tool
|
||||
htop # Interactive process viewer
|
||||
httpie # Command line HTTP client whose goal is to make CLI human-friendly
|
||||
hyperfine # Command-line benchmarking tool
|
||||
jless # Command-line pager for JSON data
|
||||
jq # Lightweight and flexible command-line JSON processor
|
||||
lynx # Text-mode web browser
|
||||
monolith # Bundle any web page into a single HTML file
|
||||
nix-prefetch-git # Script used to obtain source hashes for fetchgit
|
||||
nixd # Nix language server
|
||||
nixpacks # App source + Nix packages + Docker = Image Resources
|
||||
nixpkgs-fmt # Nix code formatter
|
||||
openai-whisper-cpp # Port of OpenAI's Whisper model in C/C++
|
||||
openssl # A cryptographic library that implements the SSL and TLS protocols
|
||||
phrase-cli # PhraseApp API v2 Command Line Client
|
||||
pngpaste # Paste image files from clipboard to file on MacOS
|
||||
pnpm # Fast, disk space efficient package manager for JavaScript
|
||||
prettierd # Prettier, as a daemon, for improved formatting speed
|
||||
reattach-to-user-namespace # Wrapper that provides access to the Mac OS X pasteboard service
|
||||
remarshal # Convert between TOML, YAML and JSON
|
||||
rsync # Fast incremental file transfer utility
|
||||
sad # CLI tool to search and replace
|
||||
silicon # Create beautiful image of your source code
|
||||
ssh-copy-id # Tool to copy SSH public keys to a remote machine
|
||||
tldr # Simplified and community-driven man pages
|
||||
tree # Command to produce a depth indented directory listing
|
||||
unar # Archive unpacker program
|
||||
vhs # Tool for generating terminal GIFs with code
|
||||
watchman # Watches files and takes action when they change
|
||||
woff2 # Webfont compression reference code
|
||||
yarn # Fast, reliable, and secure dependency management for javascript
|
||||
yt-dlp # Command-line tool to download videos from YouTube.com and other sites (youtube-dl fork)
|
||||
zoxide # A faster way to navigate your filesystem
|
||||
|
||||
# Programming Languages
|
||||
lua # Powerful, fast, lightweight, embeddable scripting language
|
||||
nodejs_22 # Event-driven I/O framework for the V8 JavaScript engine
|
||||
corepack_22 # Wrappers for npm, pnpm and Yarn via Node.js Corepack
|
||||
perl # Standard implementation of the Perl 5 programming language
|
||||
php # HTML-embedded scripting language
|
||||
python3 # High-level dynamically-typed programming language
|
||||
ruby # Object-oriented language for quick and easy programming
|
||||
rustc # Safe, concurrent, practical language (wrapper script)
|
||||
|
||||
# Server & Databases
|
||||
mysql84 # World's most popular open source database
|
||||
nginx # Reverse proxy and lightweight webserver
|
||||
postgresql # Powerful, open source object-relational database system
|
||||
sqlite # A self-contained, serverless, zero-configuration, transactional SQL database engine
|
||||
|
||||
# Applications
|
||||
alt-tab-macos # Windows alt-tab on macOS
|
||||
appcleaner # Uninstall unwanted apps
|
||||
audacity # Sound editor with graphical UI
|
||||
bartender # Take control of your menu bar
|
||||
iina # Modern media player for macOS
|
||||
keycastr # Open-source keystroke visualizer
|
||||
openfortivpn # Client for PPP+SSL VPN tunnel services
|
||||
sequelpro # MySQL database management for macOS
|
||||
telegram-desktop # Telegram Desktop messaging app
|
||||
];
|
||||
};
|
||||
}
|
||||
8
home/direnv/default.nix
Normal file
8
home/direnv/default.nix
Normal file
@@ -0,0 +1,8 @@
|
||||
{ ... }:
|
||||
|
||||
{
|
||||
programs.direnv = {
|
||||
enable = true;
|
||||
nix-direnv.enable = true;
|
||||
};
|
||||
}
|
||||
22
home/editorconfig/default.nix
Normal file
22
home/editorconfig/default.nix
Normal file
@@ -0,0 +1,22 @@
|
||||
{ ... }:
|
||||
|
||||
{
|
||||
editorconfig = {
|
||||
enable = true;
|
||||
settings = {
|
||||
"*" = {
|
||||
charset = "utf-8";
|
||||
end_of_line = "lf";
|
||||
indent_style = "tab";
|
||||
insert_final_newline = true;
|
||||
trim_trailing_whitespace = true;
|
||||
};
|
||||
"*.{md,markdown,pandoc}" = {
|
||||
trim_trailing_whitespace = false;
|
||||
};
|
||||
"Makefile" = {
|
||||
indent_style = "tab";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
112
home/fish/default.nix
Normal file
112
home/fish/default.nix
Normal file
@@ -0,0 +1,112 @@
|
||||
{ lib, pkgs, ... }:
|
||||
|
||||
let
|
||||
sharedAliases = import ../shared/shared-aliases.nix { inherit lib; };
|
||||
|
||||
# Function to read a file and return its contents as a string
|
||||
readFile = file: builtins.readFile (./. + "/functions/${file}");
|
||||
|
||||
# List of function files
|
||||
functionFiles = [
|
||||
"dataUrl.fish"
|
||||
"deleteNodeModules.fish"
|
||||
"encodeBase64.fish"
|
||||
"fcd.fish"
|
||||
"fe.fish"
|
||||
"fhcd.fish"
|
||||
"fs.fish"
|
||||
"fwt.fish"
|
||||
"ghpr.fish"
|
||||
"server.fish"
|
||||
"unquarantine.fish"
|
||||
"update.fish"
|
||||
];
|
||||
|
||||
# Create a set of functions, where each key is the function name (without .fish extension)
|
||||
# and the value is the contents of the file
|
||||
fishFunctions = builtins.listToAttrs (map
|
||||
(file: {
|
||||
name = lib.removeSuffix ".fish" file;
|
||||
value = readFile file;
|
||||
})
|
||||
functionFiles
|
||||
);
|
||||
in
|
||||
{
|
||||
programs.fish = {
|
||||
enable = true;
|
||||
|
||||
# Shell options
|
||||
interactiveShellInit = ''
|
||||
# Enable vi-mode key bindings
|
||||
fish_vi_key_bindings
|
||||
|
||||
# Set environment variables
|
||||
set -gx TERM wezterm
|
||||
|
||||
# Aliases
|
||||
alias reload 'exec fish'
|
||||
'';
|
||||
|
||||
shellAliases = sharedAliases.shellAliases;
|
||||
|
||||
functions = fishFunctions;
|
||||
|
||||
plugins = [
|
||||
{
|
||||
name = "autopair.fish";
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "jorgebucaran";
|
||||
repo = "autopair.fish";
|
||||
rev = "4d1752ff5b39819ab58d7337c69220342e9de0e2";
|
||||
sha256 = "qt3t1iKRRNuiLWiVoiAYOu+9E7jsyECyIqZJ/oRIT1A=";
|
||||
};
|
||||
}
|
||||
{
|
||||
name = "replay.fish";
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "jorgebucaran";
|
||||
repo = "replay.fish";
|
||||
rev = "d2ecacd3fe7126e822ce8918389f3ad93b14c86c";
|
||||
sha256 = "TzQ97h9tBRUg+A7DSKeTBWLQuThicbu19DHMwkmUXdg=";
|
||||
};
|
||||
}
|
||||
{
|
||||
name = "bass";
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "edc";
|
||||
repo = "bass";
|
||||
rev = "79b62958ecf4e87334f24d6743e5766475bcf4d0";
|
||||
sha256 = "3d/qL+hovNA4VMWZ0n1L+dSM1lcz7P5CQJyy+/8exTc=";
|
||||
};
|
||||
}
|
||||
{
|
||||
name = "z";
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "jethrokuan";
|
||||
repo = "z";
|
||||
rev = "85f863f20f24faf675827fb00f3a4e15c7838d76";
|
||||
sha256 = "+FUBM7CodtZrYKqU542fQD+ZDGrd2438trKM0tIESs0=";
|
||||
};
|
||||
}
|
||||
{
|
||||
name = "fish-lf-icons";
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "joshmedeski";
|
||||
repo = "fish-lf-icons";
|
||||
rev = "d1c47b2088e0ffd95766b61d2455514274865b4f";
|
||||
sha256 = "6po/PYvq4t0K8Jq5/t5hXPLn80iyl3Ymx2Whme/20kc=";
|
||||
};
|
||||
}
|
||||
{
|
||||
name = "nix-env.fish";
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "lilyball";
|
||||
repo = "nix-env.fish";
|
||||
rev = "7b65bd228429e852c8fdfa07601159130a818cfa";
|
||||
sha256 = "RG/0rfhgq6aEKNZ0XwIqOaZ6K5S4+/Y5EEMnIdtfPhk=";
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
7
home/fish/functions/dataUrl.fish
Normal file
7
home/fish/functions/dataUrl.fish
Normal file
@@ -0,0 +1,7 @@
|
||||
function dataUrl --description "Create a data URL from a file"
|
||||
set mimeType (file -b --mime-type $argv)
|
||||
if string match -r '^text/' $mimeType
|
||||
set mimeType "$mimeType;charset=utf-8"
|
||||
end
|
||||
echo "data:$mimeType;base64,(openssl base64 -in $argv | tr -d '\n')"
|
||||
end
|
||||
3
home/fish/functions/deleteNodeModules.fish
Normal file
3
home/fish/functions/deleteNodeModules.fish
Normal file
@@ -0,0 +1,3 @@
|
||||
function deleteNodeModules --description "Delete all node_modules folders in a folder and subfolders"
|
||||
find . -name "node_modules" -type d -exec rm -rf '{}' +
|
||||
end
|
||||
3
home/fish/functions/encodeBase64.fish
Normal file
3
home/fish/functions/encodeBase64.fish
Normal file
@@ -0,0 +1,3 @@
|
||||
function encodeBase64 --description "Encodes images in Base64"
|
||||
uuencode -m $argv[1] /dev/stdout | sed 1d | sed '$d'
|
||||
end
|
||||
3
home/fish/functions/fcd.fish
Normal file
3
home/fish/functions/fcd.fish
Normal file
@@ -0,0 +1,3 @@
|
||||
function fcd --description "cd into directory"
|
||||
cd (find * -type d | fzf --preview 'tree -C {} | head -50')
|
||||
end
|
||||
10
home/fish/functions/fe.fish
Normal file
10
home/fish/functions/fe.fish
Normal file
@@ -0,0 +1,10 @@
|
||||
# fe [FUZZY PATTERN] - Open the selected file with the default editor
|
||||
# - Bypass fuzzy finder if there's only one match (--select-1)
|
||||
# - Exit if there's no match (--exit-0)
|
||||
function fe --description "Open the selected file with the default editor"
|
||||
set files (fzf-tmux --query=$argv --multi --select-1 --exit-0 | string split \n)
|
||||
|
||||
if test -n "$files"
|
||||
$EDITOR $files; and true # This line is added to prevent failure when using "set -e" in shell.
|
||||
end
|
||||
end
|
||||
4
home/fish/functions/fhcd.fish
Normal file
4
home/fish/functions/fhcd.fish
Normal file
@@ -0,0 +1,4 @@
|
||||
function fhcd --description "Jump to home directory and search for directories"
|
||||
cd $HOME
|
||||
cd (find * -type d | fzf --preview 'tree -C {} | head -50')
|
||||
end
|
||||
13
home/fish/functions/fs.fish
Normal file
13
home/fish/functions/fs.fish
Normal file
@@ -0,0 +1,13 @@
|
||||
function fs --description "Determine size of a file or total size of a directory"
|
||||
if du -b /dev/null >/dev/null 2>&1
|
||||
set arg -sbh
|
||||
else
|
||||
set arg -sh
|
||||
end
|
||||
|
||||
if test -n "$argv"
|
||||
du $arg -- $argv
|
||||
else
|
||||
du $arg .[^.]* *
|
||||
end
|
||||
end
|
||||
3
home/fish/functions/fwt.fish
Normal file
3
home/fish/functions/fwt.fish
Normal file
@@ -0,0 +1,3 @@
|
||||
function fwt --description "Jump to Git worktree directory"
|
||||
cd (git worktree list | awk '{print $1}' | fzf)
|
||||
end
|
||||
4
home/fish/functions/ghpr.fish
Normal file
4
home/fish/functions/ghpr.fish
Normal file
@@ -0,0 +1,4 @@
|
||||
function ghpr --description "Search and preview GitHub pull requests"
|
||||
set -l GH_FORCE_TTY 100%
|
||||
gh pr list | fzf --ansi --preview 'GH_FORCE_TTY=100% gh pr view {1}' --preview-window down --header-lines 3 | awk '{print $1}' | xargs gh pr checkout
|
||||
end
|
||||
3
home/fish/functions/server.fish
Normal file
3
home/fish/functions/server.fish
Normal file
@@ -0,0 +1,3 @@
|
||||
function server --description "Run a server with browser-sync"
|
||||
browser-sync start --server --files "**"
|
||||
end
|
||||
5
home/fish/functions/unquarantine.fish
Normal file
5
home/fish/functions/unquarantine.fish
Normal file
@@ -0,0 +1,5 @@
|
||||
function unquarantine --description "Manually remove a downloaded app or file from the quarantine"
|
||||
for attribute in com.apple.metadata:kMDItemDownloadedDate com.apple.metadata:kMDItemWhereFroms com.apple.quarantine
|
||||
xattr -r -d "$attribute" $argv
|
||||
end
|
||||
end
|
||||
13
home/fish/functions/update.fish
Normal file
13
home/fish/functions/update.fish
Normal file
@@ -0,0 +1,13 @@
|
||||
function update --description "Updating Homebrew, Ruby, Python, Node.js, Neovim, and MacOS"
|
||||
sudo -v
|
||||
brew update && brew outdated && brew upgrade && brew cleanup
|
||||
sudo gem update --system && sudo gem update && gem cleanup all
|
||||
pip install --upgrade pip
|
||||
pip list -o --format columns | cut -d' ' -f1 | xargs -n1 pip install -U
|
||||
pnpm update -g
|
||||
~/.tmux/plugins/tpm/bin/update_plugins all
|
||||
gh extension upgrade --all
|
||||
fisher update
|
||||
nvim --headless "+Lazy! sync" +qa
|
||||
# sudo softwareupdate -i -a
|
||||
end
|
||||
30
home/fzf/default.nix
Normal file
30
home/fzf/default.nix
Normal file
@@ -0,0 +1,30 @@
|
||||
{ ... }:
|
||||
|
||||
let
|
||||
fdOptions = "--follow --exclude .git --exclude node_modules";
|
||||
in
|
||||
{
|
||||
programs.fzf = {
|
||||
enable = true;
|
||||
enableBashIntegration = true;
|
||||
enableZshIntegration = true;
|
||||
enableFishIntegration = true;
|
||||
|
||||
defaultCommand = "git ls-files --cached --others --exclude-standard | fd --hidden --type f --type l ${fdOptions}";
|
||||
defaultOptions = [ "--no-height" ];
|
||||
|
||||
changeDirWidgetCommand = "fd --type d ${fdOptions} --color=never --hidden";
|
||||
changeDirWidgetOptions = [ "--preview 'tree -C {} | head -50'" ];
|
||||
|
||||
fileWidgetCommand = "git ls-files --cached --others --exclude-standard | fd --hidden --type f --type l ${fdOptions}";
|
||||
fileWidgetOptions = [
|
||||
"--preview 'bat --color=always --style=numbers {}'"
|
||||
"--bind shift-up:preview-page-up,shift-down:preview-page-down"
|
||||
];
|
||||
|
||||
historyWidgetOptions = [ "--reverse" ];
|
||||
|
||||
tmux.enableShellIntegration = true;
|
||||
tmux.shellIntegrationOptions = [ "-p" ];
|
||||
};
|
||||
}
|
||||
84
home/gh-dash/default.nix
Normal file
84
home/gh-dash/default.nix
Normal file
@@ -0,0 +1,84 @@
|
||||
{ ... }:
|
||||
|
||||
{
|
||||
programs.gh-dash = {
|
||||
enable = true;
|
||||
settings = {
|
||||
prSections = [
|
||||
{
|
||||
title = "My Pull Requests";
|
||||
filters = "is:open author:@me";
|
||||
}
|
||||
{
|
||||
title = "Needs My Review";
|
||||
filters = "is:open review-requested:@me";
|
||||
}
|
||||
{
|
||||
title = "Involved";
|
||||
filters = "is:open involves:@me -author:@me";
|
||||
}
|
||||
];
|
||||
issuesSections = [
|
||||
{
|
||||
title = "My Issues";
|
||||
filters = "is:open author:@me";
|
||||
}
|
||||
{
|
||||
title = "Assigned";
|
||||
filters = "is:open assignee:@me";
|
||||
}
|
||||
{
|
||||
title = "Involved";
|
||||
filters = "is:open involves:@me -author:@me";
|
||||
}
|
||||
];
|
||||
defaults = {
|
||||
preview = {
|
||||
open = true;
|
||||
width = 50;
|
||||
};
|
||||
prsLimit = 20;
|
||||
issuesLimit = 20;
|
||||
view = "prs";
|
||||
layout = {
|
||||
prs = {
|
||||
updatedAt.width = 7;
|
||||
repo.width = 15;
|
||||
author.width = 15;
|
||||
assignees = {
|
||||
width = 20;
|
||||
hidden = true;
|
||||
};
|
||||
base = {
|
||||
width = 15;
|
||||
hidden = true;
|
||||
};
|
||||
lines.width = 16;
|
||||
};
|
||||
issues = {
|
||||
updatedAt.width = 7;
|
||||
repo.width = 15;
|
||||
creator.width = 10;
|
||||
assignees = {
|
||||
width = 20;
|
||||
hidden = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
refetchIntervalMinutes = 30;
|
||||
};
|
||||
keybindings = {
|
||||
issues = [ ];
|
||||
prs = [ ];
|
||||
};
|
||||
repoPaths = {
|
||||
"kogakure/*" = "~/Code/GitHub/*";
|
||||
"work/*" = "~/Code/XING/*";
|
||||
};
|
||||
theme = {
|
||||
ui.table.showSeparator = true;
|
||||
};
|
||||
pager.diff = "";
|
||||
};
|
||||
};
|
||||
}
|
||||
27
home/gh/default.nix
Normal file
27
home/gh/default.nix
Normal file
@@ -0,0 +1,27 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
programs.gh = {
|
||||
enable = true;
|
||||
extensions = with pkgs; [
|
||||
gh-copilot # Ask for assistance right in your terminal
|
||||
gh-dash # Display a dashboard with pull requests and issues
|
||||
gh-eco # Explore the ecosystem
|
||||
gh-f # Ultimate FZF extension
|
||||
gh-markdown-preview # Preview Markdown looking like on GitHub
|
||||
gh-notify # Display GitHub notifications
|
||||
gh-poi # Safely clean up your local branches
|
||||
gh-s # Search github repositories interactively
|
||||
];
|
||||
settings = {
|
||||
git_protocol = "ssh";
|
||||
prompt = "enabled";
|
||||
aliases = {
|
||||
co = "pr checkout";
|
||||
me = "pr list --assignee @me";
|
||||
pv = "pr view";
|
||||
xds = "pr list --label='team: design-system'";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
184
home/git/default.nix
Normal file
184
home/git/default.nix
Normal file
@@ -0,0 +1,184 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
programs.git = {
|
||||
enable = true;
|
||||
delta.enable = true;
|
||||
aliases = {
|
||||
st = "status";
|
||||
ci = "commit";
|
||||
co = "checkout";
|
||||
br = "branch";
|
||||
rb = "rebase";
|
||||
cp = "cherry-pick";
|
||||
dt = "difftool";
|
||||
hist = "log --color --graph --decorate --abbrev-commit --date=short --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(blue)[%an]%Creset' --abbrev-commit --";
|
||||
ls = "log --pretty=format:\"%C(yellow)%h%Cred%d\\ %Creset%s%Cblue\\ [%cn]\" --decorate";
|
||||
"local-branches" = "!git branch -vv | cut -c 3- | awk '$3 !~/\\[/ { print $1 }'";
|
||||
stats = "shortlog -sn --all --no-merges";
|
||||
today = "log --since=00:00:00 --all --no-merges --oneline";
|
||||
prune = "fetch --prune";
|
||||
undo = "reset --soft HEAD^";
|
||||
"stash-all" = "stash save --include-untracked";
|
||||
"app-status" = "!git remote update >/dev/null && git --no-pager log origin/production..origin/master --pretty=oneline >&2 | pbcopy";
|
||||
unstage = "reset HEAD --";
|
||||
merged = "branch --merged";
|
||||
unmerged = "branch --no-merge";
|
||||
branches = "for-each-ref --sort=-committerdate --format=\"%(color:blue)%(authordate:relative)\t%(color:red)%(authorname)\t%(color:white)%(color:bold)%(refname:short)\" refs/remotes";
|
||||
ignored = "ls-files --others --directory";
|
||||
# Assume workflow
|
||||
assume = "update-index --assume-unchanged";
|
||||
unassume = "update-index --no-assume-unchanged";
|
||||
assumed = "!git ls-files -v | grep ^h | cut -c 3-";
|
||||
unassumeall = "!git assumed | xargs git update-index --no-assume-unchanged";
|
||||
assumeall = "!git st -s | awk {'print $2'} | xargs git assume";
|
||||
# Rebase workflow
|
||||
mainbranch = "!git remote show origin | sed -n '/HEAD branch/s/.*: //p'";
|
||||
synced = "!git pull origin $(git mainbranch) --rebase";
|
||||
update = "!git pull origin $(git rev-parse --abbrev-ref HEAD) --rebase";
|
||||
squash = "!git rebase -v -i $(git mainbranch)";
|
||||
publish = "push origin HEAD --force-with-lease";
|
||||
pub = "publish";
|
||||
# GitHub
|
||||
hub = "!gh repo view --web";
|
||||
};
|
||||
ignores = [
|
||||
"*.lnk"
|
||||
"*.pyc"
|
||||
"*.pyo"
|
||||
"*.session"
|
||||
"*.sw[nop]"
|
||||
".BridgeSort"
|
||||
".DS_Store"
|
||||
"._*"
|
||||
".agignore"
|
||||
".bundle/"
|
||||
"m~"
|
||||
"tags"
|
||||
".worktrees"
|
||||
];
|
||||
lfs.enable = true;
|
||||
includes = [
|
||||
{ path = "~/.gitconfig.local"; }
|
||||
];
|
||||
extraConfig = {
|
||||
user = {
|
||||
useConfigOnly = true;
|
||||
};
|
||||
core = {
|
||||
editor = "code --wait";
|
||||
legacyheaders = false;
|
||||
};
|
||||
help = {
|
||||
autocorrect = 1;
|
||||
};
|
||||
delta = {
|
||||
navigate = true;
|
||||
light = false;
|
||||
line-numbers = true;
|
||||
side-by-side = true;
|
||||
syntax-theme = "Dracula";
|
||||
};
|
||||
add = {
|
||||
interactive = {
|
||||
useBuildtin = true;
|
||||
};
|
||||
};
|
||||
apply = {
|
||||
whitespace = "fix";
|
||||
};
|
||||
color = {
|
||||
status = "auto";
|
||||
diff = "auto";
|
||||
branch = "auto";
|
||||
interactive = "auto";
|
||||
ui = 1;
|
||||
};
|
||||
commit = {
|
||||
gpgsign = true;
|
||||
};
|
||||
branch = {
|
||||
autosetupmerge = true;
|
||||
sort = "-authordate";
|
||||
};
|
||||
push = {
|
||||
default = "upstream";
|
||||
followTags = true;
|
||||
autoSetupRemote = true;
|
||||
};
|
||||
pull = {
|
||||
ff = "only";
|
||||
};
|
||||
fetch = {
|
||||
prune = true;
|
||||
fsckobjects = false;
|
||||
};
|
||||
rebase = {
|
||||
autosquash = true;
|
||||
};
|
||||
status = {
|
||||
showUntrackedFiles = "all";
|
||||
};
|
||||
diff = {
|
||||
tool = "Kaleidoscope";
|
||||
algorithm = "patience";
|
||||
colorMoved = "default";
|
||||
};
|
||||
difftool = {
|
||||
prompt = false;
|
||||
Kaleidoscope.cmd = "ksdiff --partial-changeset --relative-path \"$MERGED\" -- \"$LOCAL\" \"$REMOTE\"";
|
||||
};
|
||||
merge = {
|
||||
conflictstyle = "diff3";
|
||||
tool = "Kaleidoscope";
|
||||
};
|
||||
mergetool = {
|
||||
prompt = false;
|
||||
keepBackup = false;
|
||||
Kaleidoscope = {
|
||||
cmd = "ksdiff --merge --output \"$MERGED\" --base \"$BASE\" -- \"$LOCAL\" --snapshot \"$REMOTE\" --snapshot";
|
||||
trustexitcode = true;
|
||||
trustExitCode = true;
|
||||
};
|
||||
nvim.cmd = "nvim -f -c \"Gdiffsplit!\" \"$MERGED\"";
|
||||
code = {
|
||||
cmd = "\"code $MERGED\"";
|
||||
keepBackup = false;
|
||||
trustexitcode = true;
|
||||
};
|
||||
};
|
||||
rerere.enabled = true;
|
||||
transfer = {
|
||||
fsckObjects = true;
|
||||
};
|
||||
i18n = {
|
||||
commitencoding = "UTF-8";
|
||||
logoutputencoding = "UTF-8";
|
||||
};
|
||||
repack = {
|
||||
usedeltabaseoffset = true;
|
||||
};
|
||||
"filter \"lfs\"" = {
|
||||
required = true;
|
||||
smudge = "git-lfs smudge -- %f";
|
||||
process = "git-lfs filter-process";
|
||||
clean = "git-lfs clean -- %f";
|
||||
};
|
||||
web.browser = "open";
|
||||
hub.host = "source.xing.com";
|
||||
};
|
||||
};
|
||||
|
||||
home.packages = with pkgs; [
|
||||
commitizen # Tool to create committing rules for projects, auto bump versions, and generate changelogs
|
||||
delta # Syntax-highlighting pager for git
|
||||
gh # GitHub CLI tool
|
||||
git-crypt # Transparent file encryption in git
|
||||
git-extras # GIT utilities -- repo summary, repl, changelog population, author commit percentages and more
|
||||
git-fixup # Fighting the copy-paste element of your rebase workflow
|
||||
git-lfs # Git extension for versioning large files
|
||||
git-quick-stats # Simple and efficient way to access various statistics in git repository
|
||||
gitleaks # Scan git repos (or files) for secrets
|
||||
soft-serve # Tasty, self-hosted Git server for the command line
|
||||
];
|
||||
}
|
||||
30
home/gnupg/default.nix
Normal file
30
home/gnupg/default.nix
Normal file
@@ -0,0 +1,30 @@
|
||||
# TODO: Move public/private keys into nix
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
programs.gpg = {
|
||||
enable = true;
|
||||
settings = {
|
||||
auto-key-retrieve = true;
|
||||
no-emit-version = true;
|
||||
use-agent = true;
|
||||
default-key = "F0CF1CF481C2E3AA0F806A378BD4525D7A7253E8";
|
||||
};
|
||||
|
||||
# GPG agent configuration
|
||||
# These settings go into gpg-agent.conf
|
||||
# NOTE: pinentry-program is set differently for macOS (see below)
|
||||
scdaemonSettings = { };
|
||||
};
|
||||
|
||||
# For macOS, we need to set the pinentry-program separately
|
||||
home.file.".gnupg/gpg-agent.conf".text = ''
|
||||
pinentry-program ${pkgs.pinentry_mac}/Applications/pinentry-mac.app/Contents/MacOS/pinentry-mac
|
||||
default-cache-ttl 600
|
||||
max-cache-ttl 7200
|
||||
'';
|
||||
|
||||
home.packages = with pkgs; [
|
||||
pinentry_mac
|
||||
];
|
||||
}
|
||||
7
home/hammerspoon/default.nix
Normal file
7
home/hammerspoon/default.nix
Normal file
@@ -0,0 +1,7 @@
|
||||
{ ... }:
|
||||
|
||||
{
|
||||
home.file.".hammerspoon" = {
|
||||
source = ./hammerspoon;
|
||||
};
|
||||
}
|
||||
20
home/hammerspoon/hammerspoon/caffeine.lua
Normal file
20
home/hammerspoon/hammerspoon/caffeine.lua
Normal file
@@ -0,0 +1,20 @@
|
||||
-- Replace Caffeine.app with 18 lines of Lua :D
|
||||
local caffeine = hs.menubar.new()
|
||||
|
||||
function SetCaffeineDisplay(state)
|
||||
local result
|
||||
if state then
|
||||
result = caffeine:setIcon("~/.hammerspoon/icons/sun.pdf")
|
||||
else
|
||||
result = caffeine:setIcon("~/.hammerspoon/icons/moon.pdf")
|
||||
end
|
||||
end
|
||||
|
||||
function CaffeineClicked()
|
||||
SetCaffeineDisplay(hs.caffeinate.toggle("displayIdle"))
|
||||
end
|
||||
|
||||
if caffeine then
|
||||
caffeine:setClickCallback(CaffeineClicked)
|
||||
SetCaffeineDisplay(hs.caffeinate.get("displayIdle"))
|
||||
end
|
||||
184
home/hammerspoon/hammerspoon/functions.lua
Normal file
184
home/hammerspoon/hammerspoon/functions.lua
Normal file
@@ -0,0 +1,184 @@
|
||||
----------------------
|
||||
-- Helper Functions --
|
||||
----------------------
|
||||
|
||||
-- Get list of screens and refresh that list whenever screens are plugged or unplugged:
|
||||
local screens = hs.screen.allScreens()
|
||||
local screenwatcher = hs.screen.watcher.new(function()
|
||||
screens = hs.screen.allScreens()
|
||||
end)
|
||||
screenwatcher:start()
|
||||
|
||||
-- Move a window a number of pixels in x and y
|
||||
function Nudge(xpos, ypos)
|
||||
local win = hs.window.focusedWindow()
|
||||
local f = win:frame()
|
||||
f.x = f.x + xpos
|
||||
f.y = f.y + ypos
|
||||
win:setFrame(f)
|
||||
end
|
||||
|
||||
-- Resize a window by moving the bottom
|
||||
function Yank(xpixels, ypixels)
|
||||
local win = hs.window.focusedWindow()
|
||||
local f = win:frame()
|
||||
|
||||
f.w = f.w + xpixels
|
||||
f.h = f.h + ypixels
|
||||
win:setFrame(f)
|
||||
end
|
||||
|
||||
-- Resize window for chunk of screen.
|
||||
-- For x and y: use 0 to expand fully in that dimension, 0.5 to expand halfway
|
||||
-- For w and h: use 1 for full, 0.5 for half
|
||||
function Push(x, y, w, h)
|
||||
local win = hs.window.focusedWindow()
|
||||
local f = win:frame()
|
||||
local screen = win:screen()
|
||||
local max = screen:frame()
|
||||
|
||||
f.x = max.x + (max.w * x)
|
||||
f.y = max.y + (max.h * y)
|
||||
f.w = max.w * w
|
||||
f.h = max.h * h
|
||||
win:setFrame(f)
|
||||
end
|
||||
|
||||
-- Move to monitor x. Checks to make sure monitor exists, if not moves to last monitor that exists
|
||||
function MoveToMonitor(x)
|
||||
local win = hs.window.focusedWindow()
|
||||
local newScreen = nil
|
||||
while not newScreen do
|
||||
newScreen = screens[x]
|
||||
x = x - 1
|
||||
end
|
||||
|
||||
win:moveToScreen(newScreen)
|
||||
end
|
||||
|
||||
-- Move to next screen
|
||||
local function moveToNextScreen(win)
|
||||
win = win or window.focusedWindow()
|
||||
win:moveToScreen(win:screen():next())
|
||||
end
|
||||
|
||||
-- Move to previous screen
|
||||
local function moveToPreviousScreen(win)
|
||||
win = win or window.focusedWindow()
|
||||
win:moveToScreen(win:screen():previous())
|
||||
end
|
||||
|
||||
-- This places a red circle around the mouse pointer
|
||||
local mouseCircle = nil
|
||||
local mouseCircleTimer = nil
|
||||
|
||||
function MouseHighlight()
|
||||
-- Delete an existing highlight if it exists
|
||||
if mouseCircle then
|
||||
mouseCircle:delete()
|
||||
if mouseCircleTimer then
|
||||
mouseCircleTimer:stop()
|
||||
end
|
||||
end
|
||||
-- Get the current co-ordinates of the mouse pointer
|
||||
Mousepoint = hs.mouse.get()
|
||||
-- Prepare a big red circle around the mouse pointer
|
||||
mouseCircle = hs.drawing.circle(hs.geometry.rect(Mousepoint.x - 40, Mousepoint.y - 40, 80, 80))
|
||||
mouseCircle:setStrokeColor({ ["red"] = 1, ["blue"] = 0, ["green"] = 0, ["alpha"] = 1 })
|
||||
mouseCircle:setFill(false)
|
||||
mouseCircle:setStrokeWidth(5)
|
||||
mouseCircle:show()
|
||||
|
||||
-- Set a timer to delete the circle after 3 seconds
|
||||
mouseCircleTimer = hs.timer.doAfter(2, function()
|
||||
mouseCircle:delete()
|
||||
end)
|
||||
end
|
||||
|
||||
-- Get all valid windows
|
||||
function GetAllValidWindows()
|
||||
local allWindows = hs.window.allWindows()
|
||||
local windows = {}
|
||||
local index = 1
|
||||
for i = 1, #allWindows do
|
||||
local w = allWindows[i]
|
||||
if w:screen() then
|
||||
windows[index] = w
|
||||
index = index + 1
|
||||
end
|
||||
end
|
||||
return windows
|
||||
end
|
||||
|
||||
-- Launch application or toggle it
|
||||
function launchToggleApplication(applicationName)
|
||||
local app = hs.application.find(applicationName)
|
||||
|
||||
if app then
|
||||
local appWindows = app:visibleWindows()
|
||||
|
||||
if #appWindows > 0 then
|
||||
local focusedWindow = app:focusedWindow()
|
||||
|
||||
if focusedWindow then
|
||||
if app:isHidden() then
|
||||
app:unhide()
|
||||
else
|
||||
HideApplicationWithAppleScript(app)
|
||||
end
|
||||
else
|
||||
ShowApplicationWithAppleScript(app)
|
||||
end
|
||||
else
|
||||
app:activate()
|
||||
end
|
||||
else
|
||||
hs.application.launchOrFocus(applicationName)
|
||||
end
|
||||
end
|
||||
|
||||
-- Hide application with AppleScript
|
||||
function HideApplicationWithAppleScript(app)
|
||||
local appName = app:name()
|
||||
local hideScript = [[
|
||||
tell application "Finder"
|
||||
set visible of process "%s" to false
|
||||
end tell
|
||||
]]
|
||||
local formattedScript = string.format(hideScript, appName)
|
||||
hs.osascript.applescript(formattedScript)
|
||||
end
|
||||
|
||||
-- Show application with AppleScript
|
||||
function ShowApplicationWithAppleScript(app)
|
||||
local appName = app:name()
|
||||
local showScript = [[
|
||||
tell application "Finder"
|
||||
set visible of process "%s" to true
|
||||
end tell
|
||||
]]
|
||||
local formattedScript = string.format(showScript, appName)
|
||||
hs.osascript.applescript(formattedScript)
|
||||
end
|
||||
|
||||
function Yabai(commands)
|
||||
for _, cmd in ipairs(commands) do
|
||||
os.execute("/opt/homebrew/bin/yabai -m " .. cmd)
|
||||
end
|
||||
end
|
||||
|
||||
-- Auto Reload Config
|
||||
function ReloadConfig(files)
|
||||
DoReload = false
|
||||
for _, file in pairs(files) do
|
||||
if file:sub(-4) == ".lua" then
|
||||
DoReload = true
|
||||
end
|
||||
end
|
||||
if DoReload then
|
||||
hs.reload()
|
||||
end
|
||||
end
|
||||
|
||||
hs.pathwatcher.new(os.getenv("HOME") .. "/.hammerspoon/", ReloadConfig):start()
|
||||
hs.alert.show("Hammerspoon")
|
||||
BIN
home/hammerspoon/hammerspoon/icons/cup-off.pdf
Normal file
BIN
home/hammerspoon/hammerspoon/icons/cup-off.pdf
Normal file
Binary file not shown.
BIN
home/hammerspoon/hammerspoon/icons/cup-on.pdf
Normal file
BIN
home/hammerspoon/hammerspoon/icons/cup-on.pdf
Normal file
Binary file not shown.
BIN
home/hammerspoon/hammerspoon/icons/moon.pdf
Normal file
BIN
home/hammerspoon/hammerspoon/icons/moon.pdf
Normal file
Binary file not shown.
BIN
home/hammerspoon/hammerspoon/icons/sun.pdf
Normal file
BIN
home/hammerspoon/hammerspoon/icons/sun.pdf
Normal file
Binary file not shown.
275
home/hammerspoon/hammerspoon/init.lua
Normal file
275
home/hammerspoon/hammerspoon/init.lua
Normal file
@@ -0,0 +1,275 @@
|
||||
require("functions")
|
||||
require("caffeine")
|
||||
|
||||
rawset(_G, "hs", hs or {})
|
||||
|
||||
local application = hs.application
|
||||
local window = hs.window
|
||||
local layout = hs.layout
|
||||
local screen = hs.screen
|
||||
local hotkey = hs.hotkey
|
||||
local hints = hs.hints
|
||||
|
||||
-------------------
|
||||
-- Configuration --
|
||||
-------------------
|
||||
|
||||
-- Animation
|
||||
window.animationDuration = 0
|
||||
|
||||
-- Hints
|
||||
hints.fontName = "Helvetica-Bold"
|
||||
hints.fontSize = 18
|
||||
hints.showTitleThresh = 0
|
||||
hints.style = "vimperator"
|
||||
|
||||
-- Allow searching for alternate names
|
||||
application.enableSpotlightForNameSearches(true)
|
||||
|
||||
------------
|
||||
-- Aliases --
|
||||
------------
|
||||
|
||||
-- Keys
|
||||
local KEY_HYPER = { "⇧", "⌃", "⌥", "⌘" }
|
||||
local KEY_A = { "⌥" }
|
||||
local KEY_AM = { "⌥", "⌘" }
|
||||
local KEY_CA = { "⌃", "⌥" }
|
||||
local KEY_CAM = { "⌃", "⌥", "⌘" }
|
||||
local KEY_CM = { "⌃", "⌘" }
|
||||
local KEY_SA = { "⇧", "⌥" }
|
||||
local KEY_SAM = { "⇧", "⌥", "⌘" }
|
||||
local KEY_SC = { "⇧", "⌘" }
|
||||
local KEY_SCA = { "⇧", "⌃", "⌥" }
|
||||
local KEY_SCM = { "⇧", "⌃", "⌘" }
|
||||
|
||||
-- Displays
|
||||
local DISPLAY_PRIMARY = screen.primaryScreen()
|
||||
local DISPLAY_NOTEBOOK = "Color LCD"
|
||||
|
||||
-- Sizes
|
||||
local LEFT_MOST = hs.geometry.unitrect(0, 0, 0.6, 1)
|
||||
local LEFT_LESS = hs.geometry.unitrect(0, 0, 0.4, 1)
|
||||
local RIGHT_MOST = hs.geometry.unitrect(0.4, 0, 0.6, 1)
|
||||
local RIGHT_LESS = hs.geometry.unitrect(0.6, 0, 0.4, 1)
|
||||
local FULLSCREEN = hs.geometry.unitrect(0, 0, 1, 1)
|
||||
local RIGHT_HALF = hs.geometry.unitrect(0.5, 0, 0.5, 1)
|
||||
local LEFT_HALF = hs.geometry.unitrect(0, 0, 0.5, 1)
|
||||
|
||||
-------------
|
||||
-- Layouts --
|
||||
-------------
|
||||
|
||||
-- Format reminder:
|
||||
-- {"App name", "Window name", "Display Name", "unitrect", "framerect", "fullframerect"},
|
||||
|
||||
-- One Monitor and Notebook
|
||||
local LAYOUT_DUAL = {
|
||||
{ "Brave Browser", nil, DISPLAY_PRIMARY, FULLSCREEN, nil, nil },
|
||||
{ "Calendar", nil, DISPLAY_PRIMARY, FULLSCREEN, nil, nil },
|
||||
{ "Code", nil, DISPLAY_PRIMARY, FULLSCREEN, nil, nil },
|
||||
{ "DEVONthink 3", nil, DISPLAY_PRIMARY, FULLSCREEN, nil, nil },
|
||||
{ "Element", nil, DISPLAY_NOTEBOOK, RIGHT_HALF, nil, nil },
|
||||
{ "Firefox Developer Edition", nil, DISPLAY_PRIMARY, FULLSCREEN, nil, nil },
|
||||
{ "Mail", nil, DISPLAY_PRIMARY, FULLSCREEN, nil, nil },
|
||||
{ "Messages", nil, DISPLAY_PRIMARY, RIGHT_HALF, nil, nil },
|
||||
{ "Microsoft Outlook", nil, DISPLAY_PRIMARY, FULLSCREEN, nil, nil },
|
||||
{ "Music", nil, DISPLAY_NOTEBOOK, FULLSCREEN, nil, nil },
|
||||
{ "Obsidian", nil, DISPLAY_PRIMARY, FULLSCREEN, nil, nil },
|
||||
{ "Slack", nil, DISPLAY_PRIMARY, FULLSCREEN, nil, nil },
|
||||
{ "Sonos", nil, DISPLAY_PRIMARY, FULLSCREEN, nil, nil },
|
||||
{ "Telegram", nil, DISPLAY_PRIMARY, LEFT_HALF, nil, nil },
|
||||
{ "Things", nil, DISPLAY_NOTEBOOK, FULLSCREEN, nil, nil },
|
||||
{ "iA Writer", nil, DISPLAY_PRIMARY, FULLSCREEN, nil, nil },
|
||||
{ "kitty", nil, DISPLAY_PRIMARY, FULLSCREEN, nil, nil },
|
||||
}
|
||||
|
||||
-- One Monitor
|
||||
local LAYOUT_SINGLE = {
|
||||
{ "Brave Browser", nil, DISPLAY_PRIMARY, FULLSCREEN, nil, nil },
|
||||
{ "Calendar", nil, DISPLAY_PRIMARY, LEFT_MOST, nil, nil },
|
||||
{ "Code", nil, DISPLAY_PRIMARY, FULLSCREEN, nil, nil },
|
||||
{ "DEVONthink 3", nil, DISPLAY_PRIMARY, FULLSCREEN, nil, nil },
|
||||
{ "Element", nil, DISPLAY_PRIMARY, RIGHT_HALF, nil, nil },
|
||||
{ "Firefox Developer Edition", nil, DISPLAY_PRIMARY, FULLSCREEN, nil, nil },
|
||||
{ "Mail", nil, DISPLAY_PRIMARY, RIGHT_MOST, nil, nil },
|
||||
{ "Messages", nil, DISPLAY_PRIMARY, RIGHT_LESS, nil, nil },
|
||||
{ "Microsoft Outlook", nil, DISPLAY_PRIMARY, FULLSCREEN, nil, nil },
|
||||
{ "Music", nil, DISPLAY_PRIMARY, FULLSCREEN, nil, nil },
|
||||
{ "Obsidian", nil, DISPLAY_PRIMARY, FULLSCREEN, nil, nil },
|
||||
{ "Slack", nil, DISPLAY_PRIMARY, LEFT_MOST, nil, nil },
|
||||
{ "Sonos", nil, DISPLAY_PRIMARY, FULLSCREEN, nil, nil },
|
||||
{ "Telegram", nil, DISPLAY_PRIMARY, LEFT_MOST, nil, nil },
|
||||
{ "Things", nil, DISPLAY_PRIMARY, RIGHT_LESS, nil, nil },
|
||||
{ "iA Writer", nil, DISPLAY_PRIMARY, FULLSCREEN, nil, nil },
|
||||
{ "kitty", nil, DISPLAY_PRIMARY, FULLSCREEN, nil, nil },
|
||||
}
|
||||
|
||||
------------------
|
||||
-- Key Bindings --
|
||||
------------------
|
||||
|
||||
-- stylua: ignore start
|
||||
|
||||
-- Movement hotkeys
|
||||
-- hotkey.bind(KEY_AM, "down", function() Nudge(0, 100) end)
|
||||
-- hotkey.bind(KEY_AM, "up", function() Nudge(0, -100) end)
|
||||
-- hotkey.bind(KEY_AM, "right", function() Nudge(100, 0) end)
|
||||
-- hotkey.bind(KEY_AM, "left", function() Nudge(-100, 0) end)
|
||||
|
||||
-- Resize hotkeys
|
||||
-- hotkey.bind(KEY_SAM, "up", function() Yank(0, -100) end)
|
||||
-- hotkey.bind(KEY_SAM, "down", function() Yank(0, 100) end)
|
||||
-- hotkey.bind(KEY_SAM, "right", function() Yank(100, 0) end)
|
||||
-- hotkey.bind(KEY_SAM, "left", function() Yank(-100, 0) end)
|
||||
|
||||
-- Push to screen edge
|
||||
-- hotkey.bind(KEY_CAM, "left", function() Push(0, 0, 0.5, 1) end)
|
||||
-- hotkey.bind(KEY_CAM, "right", function() Push(0.5, 0, 0.5, 1) end)
|
||||
-- hotkey.bind(KEY_CAM, "up", function() Push(0, 0, 1, 0.5) end)
|
||||
-- hotkey.bind(KEY_CAM, "down", function() Push(0, 0.5, 1, 0.5) end)
|
||||
|
||||
-- Focus
|
||||
hotkey.bind(KEY_AM, 'k', function() window.focusedWindow():focusWindowNorth() end)
|
||||
hotkey.bind(KEY_AM, 'j', function() window.focusedWindow():focusWindowSouth() end)
|
||||
hotkey.bind(KEY_AM, 'l', function() window.focusedWindow():focusWindowEast() end)
|
||||
hotkey.bind(KEY_AM, 'h', function() window.focusedWindow():focusWindowWest() end)
|
||||
|
||||
|
||||
-- Centered window with some room to see the desktop
|
||||
-- hotkey.bind(KEY_SCM, "l", function() Push(0.05, 0.05, 0.9, 0.9) end)
|
||||
-- hotkey.bind(KEY_SCM, "m", function() Push(0.1, 0.1, 0.8, 0.8) end)
|
||||
-- hotkey.bind(KEY_SCM, "s", function() Push(0.15, 0.15, 0.7, 0.7) end)
|
||||
|
||||
-- Fullscreen
|
||||
-- hotkey.bind(KEY_CAM, "0", function() Push(0, 0, 1, 1) end)
|
||||
|
||||
-- Quarter Screens
|
||||
-- hotkey.bind(KEY_CAM, "q", function() Push(0, 0, 0.5, 0.5) end)
|
||||
-- hotkey.bind(KEY_CAM, "w", function() Push(0.5, 0, 0.5, 0.5) end)
|
||||
-- hotkey.bind(KEY_CAM, "a", function() Push(0, 0.5, 0.5, 0.5) end)
|
||||
-- hotkey.bind(KEY_CAM, "s", function() Push(0.5, 0.5, 0.5, 0.5) end)
|
||||
|
||||
-- Part Screens
|
||||
-- hotkey.bind(KEY_CAM, "4", function() Push(0, 0, 0.6, 1) end)
|
||||
-- hotkey.bind(KEY_CAM, "5", function() Push(0, 0, 0.4, 1) end)
|
||||
-- hotkey.bind(KEY_CAM, "6", function() Push(0.4, 0, 0.6, 1) end)
|
||||
-- hotkey.bind(KEY_CAM, "7", function() Push(0.6, 0, 0.4, 1) end)
|
||||
|
||||
-- Move a window between monitors (preserve size)
|
||||
-- hotkey.bind(KEY_CM, "1", function() window.focusedWindow():moveOneScreenNorth() end)
|
||||
-- hotkey.bind(KEY_CM, "2", function() window.focusedWindow():moveOneScreenSouth() end)
|
||||
-- hotkey.bind(KEY_CM, "3", function() window.focusedWindow():moveOneScreenWest() end)
|
||||
-- hotkey.bind(KEY_CM, "down", function() window.focusedWindow():moveOneScreenSouth() end)
|
||||
-- hotkey.bind(KEY_CM, "h", function() window.focusedWindow():moveOneScreenWest() end)
|
||||
-- hotkey.bind(KEY_CM, "j", function() window.focusedWindow():moveOneScreenSouth() end)
|
||||
-- hotkey.bind(KEY_CM, "k", function() window.focusedWindow():moveOneScreenNorth() end)
|
||||
-- hotkey.bind(KEY_CM, "l", function() window.focusedWindow():moveOneScreenEast() end)
|
||||
-- hotkey.bind(KEY_CM, "left", function() window.focusedWindow():moveOneScreenWest() end)
|
||||
-- hotkey.bind(KEY_CM, "right", function() window.focusedWindow():moveOneScreenEast() end)
|
||||
-- hotkey.bind(KEY_CM, "up", function() window.focusedWindow():moveOneScreenNorth() end)
|
||||
|
||||
-- Move a window between monitors (change to fullscreen)
|
||||
-- hotkey.bind(KEY_SCM, "1", function() window.focusedWindow():moveOneScreenNorth(); push(0, 0, 1, 1) end)
|
||||
-- hotkey.bind(KEY_SCM, "2", function() window.focusedWindow():moveOneScreenSouth(); push(0, 0, 1, 1) end)
|
||||
-- hotkey.bind(KEY_SCM, "3", function() window.focusedWindow():moveOneScreenWest(); window.focusedWindow():moveOneScreenWest(); push(0, 0, 1, 1) end)
|
||||
-- hotkey.bind(KEY_SCM, "up", function() window.focusedWindow():moveOneScreenNorth(); push(0, 0, 1, 1) end)
|
||||
-- hotkey.bind(KEY_SCM, "down", function() window.focusedWindow():moveOneScreenSouth(); push(0, 0, 1, 1) end)
|
||||
-- hotkey.bind(KEY_SCM, "right", function() window.focusedWindow():moveOneScreenEast(); push(0, 0, 1, 1) end)
|
||||
-- hotkey.bind(KEY_SCM, "left", function() window.focusedWindow():moveOneScreenWest(); window.focusedWindow():moveOneScreenWest(); push(0, 0, 1, 1) end)
|
||||
-- hotkey.bind(KEY_SCM, "k", function() window.focusedWindow():moveOneScreenNorth(); push(0, 0, 1, 1) end)
|
||||
-- hotkey.bind(KEY_SCM, "j", function() window.focusedWindow():moveOneScreenSouth(); push(0, 0, 1, 1) end)
|
||||
-- hotkey.bind(KEY_SCM, "l", function() window.focusedWindow():moveOneScreenEast(); push(0, 0, 1, 1) end)
|
||||
-- hotkey.bind(KEY_SCM, "h", function() window.focusedWindow():moveOneScreenWest(); window.focusedWindow():moveOneScreenWest(); push(0, 0, 1, 1) end)
|
||||
|
||||
-- Yabai
|
||||
-- Focus Window
|
||||
hotkey.bind(KEY_A, "h", function() Yabai({"window --focus west"}) end)
|
||||
hotkey.bind(KEY_A, "j", function() Yabai({"window --focus south"}) end)
|
||||
hotkey.bind(KEY_A, "k", function() Yabai({"window --focus north"}) end)
|
||||
hotkey.bind(KEY_A, "l", function() Yabai({"window --focus east"}) end)
|
||||
|
||||
-- Swap Managed Windows
|
||||
hotkey.bind(KEY_SA, "h", function() Yabai({"window --swap west"}) end)
|
||||
hotkey.bind(KEY_SA, "j", function() Yabai({"window --swap south"}) end)
|
||||
hotkey.bind(KEY_SA, "k", function() Yabai({"window --swap north"}) end)
|
||||
hotkey.bind(KEY_SA, "l", function() Yabai({"window --swap east"}) end)
|
||||
|
||||
-- Move Managed Windows
|
||||
hotkey.bind(KEY_SCA, "h", function() Yabai({"window --warp west"}) end)
|
||||
hotkey.bind(KEY_SCA, "j", function() Yabai({"window --warp south"}) end)
|
||||
hotkey.bind(KEY_SCA, "k", function() Yabai({"window --warp north"}) end)
|
||||
hotkey.bind(KEY_SCA, "l", function() Yabai({"window --warp east"}) end)
|
||||
|
||||
-- Rotate Windows
|
||||
hotkey.bind(KEY_A, "r", function() Yabai({"space --rotate 90"}) end)
|
||||
|
||||
-- Toggle Window Fullscreen Zoom
|
||||
hotkey.bind(KEY_A, "f", function() Yabai({"window --toggle zoom-fullscreen"}) end)
|
||||
|
||||
-- Toggle Padding and Gap
|
||||
hotkey.bind(KEY_A, "g", function() Yabai({"space --toggle padding", "space --toggle gap"}) end)
|
||||
|
||||
-- Float/Unfloat Window
|
||||
hotkey.bind(KEY_A, "t", function() Yabai({"window --toggle float", "window --grid 7:7:1:1:5:5"}) end)
|
||||
|
||||
-- Toggle Window Split Type
|
||||
hotkey.bind(KEY_A, "e", function() Yabai({"window --toggle split"}) end)
|
||||
|
||||
-- Balance Size of Windows
|
||||
hotkey.bind(KEY_SA, "0", function() Yabai({"space --balance"}) end)
|
||||
|
||||
-- Move Window to space
|
||||
hotkey.bind(KEY_SCA, "1", function() Yabai({"window --space 1"}) end)
|
||||
hotkey.bind(KEY_SCA, "2", function() Yabai({"window --space 2"}) end)
|
||||
hotkey.bind(KEY_SCA, "3", function() Yabai({"window --space 3"}) end)
|
||||
hotkey.bind(KEY_SCA, "4", function() Yabai({"window --space 4"}) end)
|
||||
hotkey.bind(KEY_SCA, "5", function() Yabai({"window --space 5"}) end)
|
||||
hotkey.bind(KEY_SCA, "6", function() Yabai({"window --space 6"}) end)
|
||||
hotkey.bind(KEY_SCA, "7", function() Yabai({"window --space 7"}) end)
|
||||
hotkey.bind(KEY_SCA, "8", function() Yabai({"window --space 8"}) end)
|
||||
hotkey.bind(KEY_SCA, "9", function() Yabai({"window --space 9"}) end)
|
||||
|
||||
-- Send Window to Monitor
|
||||
hotkey.bind(KEY_SA, "n", function() Yabai({"window --display next"}) end)
|
||||
hotkey.bind(KEY_SA, "p", function() Yabai({"window --display prev"}) end)
|
||||
|
||||
-- Move Focus to Monitor
|
||||
hotkey.bind(KEY_SAM, "h", function() Yabai({"display --focus next"}) end)
|
||||
hotkey.bind(KEY_SAM, "l", function() Yabai({"display --focus prev"}) end)
|
||||
|
||||
-- Application shortcuts
|
||||
-- hotkey.bind(KEY_SC, "r", function() launchToggleApplication("Wezterm") end)
|
||||
-- hotkey.bind(KEY_SC, "w", function() launchToggleApplication("kitty") end)
|
||||
-- hotkey.bind(KEY_HYPER, "a", function() launchToggleApplication("Arc") end)
|
||||
-- hotkey.bind(KEY_HYPER, "b", function() launchToggleApplication("Brave Browser") end)
|
||||
-- hotkey.bind(KEY_HYPER, "c", function() launchToggleApplication("Visual Studio Code") end)
|
||||
-- hotkey.bind(KEY_HYPER, "d", function() launchToggleApplication("DEVONthink 3") end)
|
||||
-- hotkey.bind(KEY_HYPER, "e", function() launchToggleApplication("Eagle") end)
|
||||
-- hotkey.bind(KEY_HYPER, "f", function() launchToggleApplication("Reeder") end)
|
||||
-- hotkey.bind(KEY_HYPER, "g", function() launchToggleApplication("Signal") end)
|
||||
-- hotkey.bind(KEY_HYPER, "i", function() launchToggleApplication("Messages") end)
|
||||
-- hotkey.bind(KEY_HYPER, "m", function() launchToggleApplication("Mail") end)
|
||||
-- hotkey.bind(KEY_HYPER, "n", function() launchToggleApplication("MindNode") end)
|
||||
-- hotkey.bind(KEY_HYPER, "o", function() launchToggleApplication("Obsidian") end)
|
||||
-- hotkey.bind(KEY_HYPER, "r", function() launchToggleApplication("Raindrop.io") end)
|
||||
-- hotkey.bind(KEY_HYPER, "s", function() launchToggleApplication("Spotify") end)
|
||||
-- hotkey.bind(KEY_HYPER, "t", function() launchToggleApplication("Things") end)
|
||||
-- hotkey.bind(KEY_HYPER, "u", function() launchToggleApplication("Kalender") end)
|
||||
-- hotkey.bind(KEY_HYPER, "w", function() launchToggleApplication("iA Writer") end)
|
||||
-- hotkey.bind(KEY_HYPER, "x", function() launchToggleApplication("Microsoft Teams") end)
|
||||
|
||||
-- Place red circle around mouse
|
||||
hotkey.bind(KEY_CAM, "space", MouseHighlight)
|
||||
|
||||
-- Hints
|
||||
hotkey.bind(KEY_HYPER, "space", function() hints.windowHints(GetAllValidWindows()) end)
|
||||
|
||||
-- Manual config reloading (from getting started guide):
|
||||
hotkey.bind(KEY_HYPER, "delete", function() hs.reload() end)
|
||||
|
||||
-- Layouts
|
||||
hotkey.bind(KEY_HYPER, "1", function() layout.apply(LAYOUT_SINGLE) end)
|
||||
hotkey.bind(KEY_HYPER, "2", function() layout.apply(LAYOUT_DUAL) end)
|
||||
|
||||
-- stylua: ignore end
|
||||
9
home/karabiner/default.nix
Normal file
9
home/karabiner/default.nix
Normal file
@@ -0,0 +1,9 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
home.file.".config/karabiner/" = {
|
||||
source = ./karabiner;
|
||||
};
|
||||
|
||||
home.packages = [ pkgs.karabiner-elements ];
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"title": "Caps Lock to Escape, enable Caps Lock when held",
|
||||
"rules": [
|
||||
{
|
||||
"description": "Caps Lock to Escape on single press, Caps Lock on press and hold.",
|
||||
"manipulators": [
|
||||
{
|
||||
"type": "basic",
|
||||
"from": {
|
||||
"key_code": "caps_lock",
|
||||
"modifiers": {
|
||||
"optional": [
|
||||
"any"
|
||||
]
|
||||
}
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"key_code": "escape"
|
||||
}
|
||||
],
|
||||
"to_if_held_down": [
|
||||
{
|
||||
"key_code": "caps_lock"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
{"title":"Keychron K8 Microphone Button to Microsoft Teams Mute","rules":[{"description":"Focus Microsoft Teams Meeting Manager Window","manipulators":[{"from":{"modifiers":{"mandatory":["fn"]},"key_code":"spacebar"},"conditions":[{"type":"frontmost_application_unless","bundle_identifiers":["com.microsoft.teams"]}],"to":[{"shell_command":"if [ $(ps aux | grep -v grep | grep -ci \"Microsoft Teams.app/Contents/Frameworks/Microsoft Teams Helper.app\") -gt 0 ]; then osascript -e 'activate application id \"com.microsoft.teams\"' -e 'tell application \"System Events\" to keystroke \"m\" using {command down, shift down}'; fi","lazy":true,"repeat":true}],"type":"basic"}]},{"description":"Change Fn + Spacebar to Shift + Cmd + A","manipulators":[{"type":"basic","from":{"modifiers":{"mandatory":["fn"]},"key_code":"spacebar"},"conditions":[{"type":"frontmost_application_if","bundle_identifiers":["^com\\.microsoft\\.teams$"]}],"to":[{"key_code":"m","modifiers":["left_shift","left_gui"]}]}]}]}
|
||||
@@ -0,0 +1,181 @@
|
||||
{
|
||||
"title": "German Umlaut",
|
||||
"rules": [
|
||||
{
|
||||
"description": "Change option + a/o/u to ä/ö/ü",
|
||||
"manipulators": [
|
||||
{
|
||||
"type": "basic",
|
||||
"from": {
|
||||
"key_code": "a",
|
||||
"modifiers": {
|
||||
"mandatory": [
|
||||
"option"
|
||||
],
|
||||
"optional": [
|
||||
"caps_lock"
|
||||
]
|
||||
}
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"key_code": "u",
|
||||
"modifiers": [
|
||||
"left_option"
|
||||
]
|
||||
},
|
||||
{
|
||||
"key_code": "a"
|
||||
},
|
||||
{
|
||||
"key_code": "vk_none"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "basic",
|
||||
"from": {
|
||||
"key_code": "a",
|
||||
"modifiers": {
|
||||
"mandatory": [
|
||||
"option",
|
||||
"shift"
|
||||
]
|
||||
}
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"key_code": "u",
|
||||
"modifiers": [
|
||||
"left_option"
|
||||
]
|
||||
},
|
||||
{
|
||||
"key_code": "a",
|
||||
"modifiers": [
|
||||
"left_shift"
|
||||
]
|
||||
},
|
||||
{
|
||||
"key_code": "vk_none"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "basic",
|
||||
"from": {
|
||||
"key_code": "o",
|
||||
"modifiers": {
|
||||
"mandatory": [
|
||||
"option"
|
||||
],
|
||||
"optional": [
|
||||
"caps_lock"
|
||||
]
|
||||
}
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"key_code": "u",
|
||||
"modifiers": [
|
||||
"left_option"
|
||||
]
|
||||
},
|
||||
{
|
||||
"key_code": "o"
|
||||
},
|
||||
{
|
||||
"key_code": "vk_none"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "basic",
|
||||
"from": {
|
||||
"key_code": "o",
|
||||
"modifiers": {
|
||||
"mandatory": [
|
||||
"option",
|
||||
"shift"
|
||||
]
|
||||
}
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"key_code": "u",
|
||||
"modifiers": [
|
||||
"left_option"
|
||||
]
|
||||
},
|
||||
{
|
||||
"key_code": "o",
|
||||
"modifiers": [
|
||||
"left_shift"
|
||||
]
|
||||
},
|
||||
{
|
||||
"key_code": "vk_none"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "basic",
|
||||
"from": {
|
||||
"key_code": "u",
|
||||
"modifiers": {
|
||||
"mandatory": [
|
||||
"option"
|
||||
],
|
||||
"optional": [
|
||||
"caps_lock"
|
||||
]
|
||||
}
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"key_code": "u",
|
||||
"modifiers": [
|
||||
"left_option"
|
||||
]
|
||||
},
|
||||
{
|
||||
"key_code": "u"
|
||||
},
|
||||
{
|
||||
"key_code": "vk_none"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "basic",
|
||||
"from": {
|
||||
"key_code": "u",
|
||||
"modifiers": {
|
||||
"mandatory": [
|
||||
"option",
|
||||
"shift"
|
||||
]
|
||||
}
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"key_code": "u",
|
||||
"modifiers": [
|
||||
"left_option"
|
||||
]
|
||||
},
|
||||
{
|
||||
"key_code": "u",
|
||||
"modifiers": [
|
||||
"left_shift"
|
||||
]
|
||||
},
|
||||
{
|
||||
"key_code": "vk_none"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
764
home/karabiner/karabiner/karabiner.json
Normal file
764
home/karabiner/karabiner/karabiner.json
Normal file
@@ -0,0 +1,764 @@
|
||||
{
|
||||
"global": {
|
||||
"check_for_updates_on_startup": true,
|
||||
"show_in_menu_bar": true,
|
||||
"show_profile_name_in_menu_bar": false,
|
||||
"unsafe_ui": false
|
||||
},
|
||||
"profiles": [
|
||||
{
|
||||
"complex_modifications": {
|
||||
"parameters": {
|
||||
"basic.simultaneous_threshold_milliseconds": 50,
|
||||
"basic.to_delayed_action_delay_milliseconds": 500,
|
||||
"basic.to_if_alone_timeout_milliseconds": 1000,
|
||||
"basic.to_if_held_down_threshold_milliseconds": 500,
|
||||
"mouse_motion_to_scroll.speed": 100
|
||||
},
|
||||
"rules": [
|
||||
{
|
||||
"description": "CAPS_LOCK : (Hyper) SHIFT+COMMAND+OPTION+CONTROL or ESCAPE (if alone)",
|
||||
"manipulators": [
|
||||
{
|
||||
"from": {
|
||||
"key_code": "caps_lock",
|
||||
"modifiers": {
|
||||
"optional": [
|
||||
"any"
|
||||
]
|
||||
}
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"key_code": "left_shift",
|
||||
"modifiers": [
|
||||
"left_command",
|
||||
"left_control",
|
||||
"left_option"
|
||||
]
|
||||
}
|
||||
],
|
||||
"to_if_alone": [
|
||||
{
|
||||
"key_code": "escape"
|
||||
}
|
||||
],
|
||||
"type": "basic"
|
||||
},
|
||||
{
|
||||
"description": "Avoid starting sysdiagnose with the built-in macOS shortcut cmd+shift+option+ctrl+,",
|
||||
"from": {
|
||||
"key_code": "comma",
|
||||
"modifiers": {
|
||||
"mandatory": [
|
||||
"command",
|
||||
"shift",
|
||||
"option",
|
||||
"control"
|
||||
]
|
||||
}
|
||||
},
|
||||
"to": [],
|
||||
"type": "basic"
|
||||
},
|
||||
{
|
||||
"description": "Avoid starting sysdiagnose with the built-in macOS shortcut cmd+shift+option+ctrl+.",
|
||||
"from": {
|
||||
"key_code": "period",
|
||||
"modifiers": {
|
||||
"mandatory": [
|
||||
"command",
|
||||
"shift",
|
||||
"option",
|
||||
"control"
|
||||
]
|
||||
}
|
||||
},
|
||||
"to": [],
|
||||
"type": "basic"
|
||||
},
|
||||
{
|
||||
"from": {
|
||||
"description": "Avoid starting sysdiagnose with the built-in macOS shortcut cmd+shift+option+ctrl+/",
|
||||
"key_code": "slash",
|
||||
"modifiers": {
|
||||
"mandatory": [
|
||||
"command",
|
||||
"shift",
|
||||
"option",
|
||||
"control"
|
||||
]
|
||||
}
|
||||
},
|
||||
"to": [],
|
||||
"type": "basic"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "CAPS_LOCK + i/j/k/l == Arrow Keys",
|
||||
"manipulators": [
|
||||
{
|
||||
"from": {
|
||||
"key_code": "k",
|
||||
"modifiers": {
|
||||
"mandatory": [
|
||||
"left_shift",
|
||||
"left_command",
|
||||
"left_control",
|
||||
"left_option"
|
||||
],
|
||||
"optional": [
|
||||
"any"
|
||||
]
|
||||
}
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"key_code": "up_arrow"
|
||||
}
|
||||
],
|
||||
"type": "basic"
|
||||
},
|
||||
{
|
||||
"from": {
|
||||
"key_code": "h",
|
||||
"modifiers": {
|
||||
"mandatory": [
|
||||
"left_shift",
|
||||
"left_command",
|
||||
"left_control",
|
||||
"left_option"
|
||||
],
|
||||
"optional": [
|
||||
"any"
|
||||
]
|
||||
}
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"key_code": "left_arrow"
|
||||
}
|
||||
],
|
||||
"type": "basic"
|
||||
},
|
||||
{
|
||||
"from": {
|
||||
"key_code": "j",
|
||||
"modifiers": {
|
||||
"mandatory": [
|
||||
"left_shift",
|
||||
"left_command",
|
||||
"left_control",
|
||||
"left_option"
|
||||
],
|
||||
"optional": [
|
||||
"any"
|
||||
]
|
||||
}
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"key_code": "down_arrow"
|
||||
}
|
||||
],
|
||||
"type": "basic"
|
||||
},
|
||||
{
|
||||
"from": {
|
||||
"key_code": "l",
|
||||
"modifiers": {
|
||||
"mandatory": [
|
||||
"left_shift",
|
||||
"left_command",
|
||||
"left_control",
|
||||
"left_option"
|
||||
],
|
||||
"optional": [
|
||||
"any"
|
||||
]
|
||||
}
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"key_code": "right_arrow"
|
||||
}
|
||||
],
|
||||
"type": "basic"
|
||||
},
|
||||
{
|
||||
"from": {
|
||||
"key_code": "semicolon",
|
||||
"modifiers": {
|
||||
"mandatory": [
|
||||
"left_shift",
|
||||
"left_command",
|
||||
"left_control",
|
||||
"left_option"
|
||||
],
|
||||
"optional": [
|
||||
"any"
|
||||
]
|
||||
}
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"key_code": "right_arrow",
|
||||
"modifiers": [
|
||||
"left_command"
|
||||
]
|
||||
}
|
||||
],
|
||||
"type": "basic"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "F4: Open Raycast",
|
||||
"manipulators": [
|
||||
{
|
||||
"from": {
|
||||
"key_code": "f4"
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"shell_command": "open -a raycast"
|
||||
}
|
||||
],
|
||||
"type": "basic"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "Focus Microsoft Teams Meeting Manager Window",
|
||||
"manipulators": [
|
||||
{
|
||||
"conditions": [
|
||||
{
|
||||
"bundle_identifiers": [
|
||||
"com.microsoft.teams"
|
||||
],
|
||||
"type": "frontmost_application_unless"
|
||||
}
|
||||
],
|
||||
"from": {
|
||||
"key_code": "spacebar",
|
||||
"modifiers": {
|
||||
"mandatory": [
|
||||
"fn"
|
||||
]
|
||||
}
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"lazy": true,
|
||||
"repeat": true,
|
||||
"shell_command": "if [ $(ps aux | grep -v grep | grep -ci \"Microsoft Teams.app/Contents/Frameworks/Microsoft Teams Helper.app\") -gt 0 ]; then osascript -e 'activate application id \"com.microsoft.teams\"' -e 'tell application \"System Events\" to keystroke \"m\" using {command down, shift down}'; fi"
|
||||
}
|
||||
],
|
||||
"type": "basic"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "Change Fn + Spacebar to Shift + Cmd + A",
|
||||
"manipulators": [
|
||||
{
|
||||
"conditions": [
|
||||
{
|
||||
"bundle_identifiers": [
|
||||
"^com\\.microsoft\\.teams$"
|
||||
],
|
||||
"type": "frontmost_application_if"
|
||||
}
|
||||
],
|
||||
"from": {
|
||||
"key_code": "spacebar",
|
||||
"modifiers": {
|
||||
"mandatory": [
|
||||
"fn"
|
||||
]
|
||||
}
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"key_code": "m",
|
||||
"modifiers": [
|
||||
"left_shift",
|
||||
"left_gui"
|
||||
]
|
||||
}
|
||||
],
|
||||
"type": "basic"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "Change option + a/o/u to ä/ö/ü",
|
||||
"manipulators": [
|
||||
{
|
||||
"from": {
|
||||
"key_code": "a",
|
||||
"modifiers": {
|
||||
"mandatory": [
|
||||
"option"
|
||||
],
|
||||
"optional": [
|
||||
"caps_lock"
|
||||
]
|
||||
}
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"key_code": "u",
|
||||
"modifiers": [
|
||||
"left_option"
|
||||
]
|
||||
},
|
||||
{
|
||||
"key_code": "a"
|
||||
},
|
||||
{
|
||||
"key_code": "vk_none"
|
||||
}
|
||||
],
|
||||
"type": "basic"
|
||||
},
|
||||
{
|
||||
"from": {
|
||||
"key_code": "a",
|
||||
"modifiers": {
|
||||
"mandatory": [
|
||||
"option",
|
||||
"shift"
|
||||
]
|
||||
}
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"key_code": "u",
|
||||
"modifiers": [
|
||||
"left_option"
|
||||
]
|
||||
},
|
||||
{
|
||||
"key_code": "a",
|
||||
"modifiers": [
|
||||
"left_shift"
|
||||
]
|
||||
},
|
||||
{
|
||||
"key_code": "vk_none"
|
||||
}
|
||||
],
|
||||
"type": "basic"
|
||||
},
|
||||
{
|
||||
"from": {
|
||||
"key_code": "o",
|
||||
"modifiers": {
|
||||
"mandatory": [
|
||||
"option"
|
||||
],
|
||||
"optional": [
|
||||
"caps_lock"
|
||||
]
|
||||
}
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"key_code": "u",
|
||||
"modifiers": [
|
||||
"left_option"
|
||||
]
|
||||
},
|
||||
{
|
||||
"key_code": "o"
|
||||
},
|
||||
{
|
||||
"key_code": "vk_none"
|
||||
}
|
||||
],
|
||||
"type": "basic"
|
||||
},
|
||||
{
|
||||
"from": {
|
||||
"key_code": "o",
|
||||
"modifiers": {
|
||||
"mandatory": [
|
||||
"option",
|
||||
"shift"
|
||||
]
|
||||
}
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"key_code": "u",
|
||||
"modifiers": [
|
||||
"left_option"
|
||||
]
|
||||
},
|
||||
{
|
||||
"key_code": "o",
|
||||
"modifiers": [
|
||||
"left_shift"
|
||||
]
|
||||
},
|
||||
{
|
||||
"key_code": "vk_none"
|
||||
}
|
||||
],
|
||||
"type": "basic"
|
||||
},
|
||||
{
|
||||
"from": {
|
||||
"key_code": "u",
|
||||
"modifiers": {
|
||||
"mandatory": [
|
||||
"option"
|
||||
],
|
||||
"optional": [
|
||||
"caps_lock"
|
||||
]
|
||||
}
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"key_code": "u",
|
||||
"modifiers": [
|
||||
"left_option"
|
||||
]
|
||||
},
|
||||
{
|
||||
"key_code": "u"
|
||||
},
|
||||
{
|
||||
"key_code": "vk_none"
|
||||
}
|
||||
],
|
||||
"type": "basic"
|
||||
},
|
||||
{
|
||||
"from": {
|
||||
"key_code": "u",
|
||||
"modifiers": {
|
||||
"mandatory": [
|
||||
"option",
|
||||
"shift"
|
||||
]
|
||||
}
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"key_code": "u",
|
||||
"modifiers": [
|
||||
"left_option"
|
||||
]
|
||||
},
|
||||
{
|
||||
"key_code": "u",
|
||||
"modifiers": [
|
||||
"left_shift"
|
||||
]
|
||||
},
|
||||
{
|
||||
"key_code": "vk_none"
|
||||
}
|
||||
],
|
||||
"type": "basic"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"devices": [
|
||||
{
|
||||
"disable_built_in_keyboard_if_exists": false,
|
||||
"fn_function_keys": [],
|
||||
"identifiers": {
|
||||
"is_keyboard": true,
|
||||
"is_pointing_device": false,
|
||||
"product_id": 632,
|
||||
"vendor_id": 1452
|
||||
},
|
||||
"ignore": false,
|
||||
"manipulate_caps_lock_led": true,
|
||||
"simple_modifications": [],
|
||||
"treat_as_built_in_keyboard": false
|
||||
},
|
||||
{
|
||||
"disable_built_in_keyboard_if_exists": false,
|
||||
"fn_function_keys": [],
|
||||
"identifiers": {
|
||||
"is_keyboard": false,
|
||||
"is_pointing_device": true,
|
||||
"product_id": 632,
|
||||
"vendor_id": 1452
|
||||
},
|
||||
"ignore": true,
|
||||
"manipulate_caps_lock_led": false,
|
||||
"simple_modifications": [],
|
||||
"treat_as_built_in_keyboard": false
|
||||
},
|
||||
{
|
||||
"disable_built_in_keyboard_if_exists": false,
|
||||
"fn_function_keys": [],
|
||||
"identifiers": {
|
||||
"is_keyboard": true,
|
||||
"is_pointing_device": false,
|
||||
"product_id": 620,
|
||||
"vendor_id": 76
|
||||
},
|
||||
"ignore": false,
|
||||
"manipulate_caps_lock_led": true,
|
||||
"simple_modifications": [],
|
||||
"treat_as_built_in_keyboard": false
|
||||
},
|
||||
{
|
||||
"disable_built_in_keyboard_if_exists": false,
|
||||
"fn_function_keys": [],
|
||||
"identifiers": {
|
||||
"is_keyboard": false,
|
||||
"is_pointing_device": true,
|
||||
"product_id": 617,
|
||||
"vendor_id": 76
|
||||
},
|
||||
"ignore": true,
|
||||
"manipulate_caps_lock_led": false,
|
||||
"simple_modifications": [],
|
||||
"treat_as_built_in_keyboard": false
|
||||
},
|
||||
{
|
||||
"disable_built_in_keyboard_if_exists": false,
|
||||
"fn_function_keys": [],
|
||||
"identifiers": {
|
||||
"is_keyboard": true,
|
||||
"is_pointing_device": false,
|
||||
"product_id": 34304,
|
||||
"vendor_id": 1452
|
||||
},
|
||||
"ignore": false,
|
||||
"manipulate_caps_lock_led": true,
|
||||
"simple_modifications": [],
|
||||
"treat_as_built_in_keyboard": false
|
||||
},
|
||||
{
|
||||
"disable_built_in_keyboard_if_exists": false,
|
||||
"fn_function_keys": [],
|
||||
"identifiers": {
|
||||
"is_keyboard": true,
|
||||
"is_pointing_device": false,
|
||||
"product_id": 832,
|
||||
"vendor_id": 1452
|
||||
},
|
||||
"ignore": false,
|
||||
"manipulate_caps_lock_led": true,
|
||||
"simple_modifications": [],
|
||||
"treat_as_built_in_keyboard": false
|
||||
},
|
||||
{
|
||||
"disable_built_in_keyboard_if_exists": false,
|
||||
"fn_function_keys": [],
|
||||
"identifiers": {
|
||||
"is_keyboard": false,
|
||||
"is_pointing_device": true,
|
||||
"product_id": 832,
|
||||
"vendor_id": 1452
|
||||
},
|
||||
"ignore": true,
|
||||
"manipulate_caps_lock_led": false,
|
||||
"simple_modifications": [],
|
||||
"treat_as_built_in_keyboard": false
|
||||
},
|
||||
{
|
||||
"disable_built_in_keyboard_if_exists": false,
|
||||
"fn_function_keys": [],
|
||||
"identifiers": {
|
||||
"is_keyboard": true,
|
||||
"is_pointing_device": false,
|
||||
"product_id": 591,
|
||||
"vendor_id": 1452
|
||||
},
|
||||
"ignore": false,
|
||||
"manipulate_caps_lock_led": true,
|
||||
"simple_modifications": [],
|
||||
"treat_as_built_in_keyboard": false
|
||||
}
|
||||
],
|
||||
"fn_function_keys": [
|
||||
{
|
||||
"from": {
|
||||
"key_code": "f1"
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"consumer_key_code": "display_brightness_decrement"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"from": {
|
||||
"key_code": "f2"
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"consumer_key_code": "display_brightness_increment"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"from": {
|
||||
"key_code": "f3"
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"apple_vendor_keyboard_key_code": "mission_control"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"from": {
|
||||
"key_code": "f4"
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"apple_vendor_keyboard_key_code": "launchpad"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"from": {
|
||||
"key_code": "f5"
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"key_code": "f5"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"from": {
|
||||
"key_code": "f6"
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"key_code": "f6"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"from": {
|
||||
"key_code": "f7"
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"consumer_key_code": "rewind"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"from": {
|
||||
"key_code": "f8"
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"consumer_key_code": "play_or_pause"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"from": {
|
||||
"key_code": "f9"
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"consumer_key_code": "fast_forward"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"from": {
|
||||
"key_code": "f10"
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"consumer_key_code": "mute"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"from": {
|
||||
"key_code": "f11"
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"consumer_key_code": "volume_decrement"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"from": {
|
||||
"key_code": "f12"
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"consumer_key_code": "volume_increment"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"name": "Default profile",
|
||||
"parameters": {
|
||||
"delay_milliseconds_before_open_device": 1000
|
||||
},
|
||||
"selected": true,
|
||||
"simple_modifications": [
|
||||
{
|
||||
"from": {
|
||||
"key_code": "f3"
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"apple_vendor_keyboard_key_code": "mission_control"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"from": {
|
||||
"key_code": "f7"
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"consumer_key_code": "rewind"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"from": {
|
||||
"key_code": "f8"
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"consumer_key_code": "play_or_pause"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"from": {
|
||||
"key_code": "f9"
|
||||
},
|
||||
"to": [
|
||||
{
|
||||
"consumer_key_code": "fast_forward"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"virtual_hid_keyboard": {
|
||||
"country_code": 0,
|
||||
"indicate_sticky_modifier_keys_state": true,
|
||||
"mouse_key_xy_scale": 100
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
9
home/lazydocker/default.nix
Normal file
9
home/lazydocker/default.nix
Normal file
@@ -0,0 +1,9 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
home.file.".config/lazydocker/config.yml" = {
|
||||
source = ./lazydocker.yml;
|
||||
};
|
||||
|
||||
home.packages = [ pkgs.lazydocker ];
|
||||
}
|
||||
54
home/lazydocker/lazydocker.yml
Normal file
54
home/lazydocker/lazydocker.yml
Normal file
@@ -0,0 +1,54 @@
|
||||
gui:
|
||||
scrollHeight: 2
|
||||
language: "auto" # one of 'auto' | 'en' | 'pl' | 'nl' | 'de' | 'tr'
|
||||
theme:
|
||||
activeBorderColor:
|
||||
- green
|
||||
- bold
|
||||
inactiveBorderColor:
|
||||
- white
|
||||
optionsTextColor:
|
||||
- blue
|
||||
returnImmediately: false
|
||||
wrapMainPanel: true
|
||||
# Side panel width as a ratio of the screen's width
|
||||
sidePanelWidth: 0.333
|
||||
# Determines whether we show the bottom line (the one containing keybinding
|
||||
# info and the status of the app).
|
||||
showBottomLine: true
|
||||
# When true, increases vertical space used by focused side panel,
|
||||
# creating an accordion effect
|
||||
expandFocusedSidePanel: false
|
||||
logs:
|
||||
timestamps: false
|
||||
since: "60m" # set to '' to show all logs
|
||||
tail: "" # set to 200 to show last 200 lines of logs
|
||||
commandTemplates:
|
||||
dockerCompose: docker-compose
|
||||
restartService: "{{ .DockerCompose }} restart {{ .Service.Name }}"
|
||||
up: "{{ .DockerCompose }} up -d"
|
||||
down: "{{ .DockerCompose }} down"
|
||||
downWithVolumes: "{{ .DockerCompose }} down --volumes"
|
||||
upService: "{{ .DockerCompose }} up -d {{ .Service.Name }}"
|
||||
startService: "{{ .DockerCompose }} start {{ .Service.Name }}"
|
||||
stopService: "{{ .DockerCompose }} stop {{ .Service.Name }}"
|
||||
serviceLogs: "{{ .DockerCompose }} logs --since=60m --follow {{ .Service.Name }}"
|
||||
viewServiceLogs: "{{ .DockerCompose }} logs --follow {{ .Service.Name }}"
|
||||
rebuildService: "{{ .DockerCompose }} up -d --build {{ .Service.Name }}"
|
||||
recreateService: "{{ .DockerCompose }} up -d --force-recreate {{ .Service.Name }}"
|
||||
allLogs: "{{ .DockerCompose }} logs --tail=300 --follow"
|
||||
viewAlLogs: "{{ .DockerCompose }} logs"
|
||||
dockerComposeConfig: "{{ .DockerCompose }} config"
|
||||
checkDockerComposeConfig: "{{ .DockerCompose }} config --quiet"
|
||||
serviceTop: "{{ .DockerCompose }} top {{ .Service.Name }}"
|
||||
oS:
|
||||
openCommand: open {{filename}}
|
||||
openLinkCommand: open {{link}}
|
||||
stats:
|
||||
graphs:
|
||||
- caption: CPU (%)
|
||||
statPath: DerivedStats.CPUPercentage
|
||||
color: blue
|
||||
- caption: Memory (%)
|
||||
statPath: DerivedStats.MemoryPercentage
|
||||
color: green
|
||||
32
home/lazygit/default.nix
Normal file
32
home/lazygit/default.nix
Normal file
@@ -0,0 +1,32 @@
|
||||
{ ... }:
|
||||
|
||||
{
|
||||
programs.lazygit = {
|
||||
enable = true;
|
||||
settings = {
|
||||
git = {
|
||||
overrideGpg = true;
|
||||
paging = {
|
||||
colorArg = "always";
|
||||
pager = "delta --dark --paging=never syntax-theme=Dracula";
|
||||
};
|
||||
};
|
||||
customCommands = [
|
||||
{
|
||||
key = "C";
|
||||
command = "git cz c";
|
||||
description = "commit with commitizen";
|
||||
context = "files";
|
||||
loadingText = "opening commitizen commit tool";
|
||||
subprocess = true;
|
||||
}
|
||||
{
|
||||
key = "W";
|
||||
command = "git commit --no-verify";
|
||||
context = "global";
|
||||
subprocess = true;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
143
home/lf/default.nix
Normal file
143
home/lf/default.nix
Normal file
@@ -0,0 +1,143 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
programs.lf =
|
||||
{
|
||||
enable = true;
|
||||
settings = {
|
||||
number = true;
|
||||
icons = true;
|
||||
promptfmt = "\033[34;1m%d\033[0m\033[1m%f\033[0m";
|
||||
shell = "bash";
|
||||
shellopts = "-eu";
|
||||
ifs = "\\n";
|
||||
scrolloff = 10;
|
||||
};
|
||||
keybindings = {
|
||||
"<c-f>" = ":fzf_jump";
|
||||
"<delete>" = "delete";
|
||||
"<enter>" = "shell";
|
||||
O = "$mimeopen --ask $f";
|
||||
X = "!$f";
|
||||
f = "$nvim $(fzf)";
|
||||
gb = ":git_branch";
|
||||
gl = "$\{{clear; git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit}}";
|
||||
gp = "$\{{clear; git pull --rebase || true; echo 'press ENTER'; read ENTER}}";
|
||||
gs = "$\{{clear; git status; echo 'press ENTER'; read ENTER}}";
|
||||
o = "&mimeopen $f";
|
||||
x = "$$f";
|
||||
};
|
||||
previewer = {
|
||||
source = pkgs.writeShellScript "pv.sh" ''
|
||||
#!/usr/bin/env bash
|
||||
|
||||
case "$1" in
|
||||
*) bat --force-colorization --paging=never --style=changes,numbers \
|
||||
--terminal-width $(($2 - 3)) "$1" && false ;;
|
||||
esac
|
||||
'';
|
||||
};
|
||||
commands = {
|
||||
delete = ''
|
||||
''${{
|
||||
set -f
|
||||
printf "$fx\n"
|
||||
printf "delete? [y/n]"
|
||||
read ans
|
||||
[ $ans = "y" ] && rm -rf $fx
|
||||
}}
|
||||
'';
|
||||
# extract the current file with the right command
|
||||
extract = ''
|
||||
''${{
|
||||
set -f
|
||||
case $f in
|
||||
*.tar.bz|*.tar.bz2|*.tbz|*.tbz2) tar xjvf $f;;
|
||||
*.tar.gz|*.tgz) tar xzvf $f;;
|
||||
*.tar.xz|*.txz) tar xJvf $f;;
|
||||
*.zip) unzip $f;;
|
||||
*.rar) unrar x $f;;
|
||||
*.7z) 7z x $f;;
|
||||
esac
|
||||
}}
|
||||
'';
|
||||
# compress current file or selected files with tar and gunzip
|
||||
tar = ''
|
||||
''${{
|
||||
set -f
|
||||
mkdir $1
|
||||
cp -r $fx $1
|
||||
tar czf $1.tar.gz $1
|
||||
rm -rf $1
|
||||
}}
|
||||
'';
|
||||
# define a custom 'open' command
|
||||
# This command is called when current file is not a directory. You may want to
|
||||
# use either file extensions and/or mime types here. Below uses an editor for
|
||||
# text files and a file opener for the rest.
|
||||
open = ''
|
||||
''${{
|
||||
case $(file --mime-type $f -b) in
|
||||
text/*) $EDITOR $fx;;
|
||||
*) for f in $fx; do setsid $OPENER $f > /dev/null 2> /dev/null & done;;
|
||||
esac
|
||||
}}
|
||||
'';
|
||||
# compress current file or selected files with zip
|
||||
zip = ''
|
||||
''${{
|
||||
set -f
|
||||
mkdir $1
|
||||
cp -r $fx $1
|
||||
zip -r $1.zip $1
|
||||
rm -rf $1
|
||||
}}
|
||||
'';
|
||||
fzf_jump = ''
|
||||
''${{
|
||||
res="$(find . -maxdepth 1 | fzf-tmux -p --reverse --header='Jump to location' | sed 's/\\/\\\\/g;s/"/\\"/g')"
|
||||
if [ -d "$res" ] ; then
|
||||
cmd="cd"
|
||||
elif [ -f "$res" ] ; then
|
||||
cmd="select"
|
||||
else
|
||||
exit 0
|
||||
fi
|
||||
lf -remote "send $id $cmd \"$res\""
|
||||
}}
|
||||
'';
|
||||
z = ''
|
||||
%{{
|
||||
result="$(zoxide query --exclude "$PWD" -- "$@")"
|
||||
lf -remote "send $id cd \"$result\""
|
||||
}}
|
||||
'';
|
||||
git_branch = ''
|
||||
''${{
|
||||
git branch | fzf-tmux -p --reverse | xargs git checkout
|
||||
pwd_shell=$(pwd)
|
||||
lf -remote "send $id updir"
|
||||
lf -remote "send $id cd \"$pwd_shell\""
|
||||
}}
|
||||
'';
|
||||
};
|
||||
extraConfig = '''';
|
||||
};
|
||||
|
||||
home.packages = with pkgs; [
|
||||
bat
|
||||
fzf
|
||||
zoxide # z
|
||||
git
|
||||
gnutar # tar
|
||||
unzip
|
||||
unrar
|
||||
p7zip # 7z
|
||||
file # for mime-type detection
|
||||
findutils # find
|
||||
gnused # sed
|
||||
xdg-utils
|
||||
shared-mime-info
|
||||
tmux
|
||||
];
|
||||
}
|
||||
90
home/lsd/default.nix
Normal file
90
home/lsd/default.nix
Normal file
@@ -0,0 +1,90 @@
|
||||
{ ... }:
|
||||
|
||||
{
|
||||
programs.lsd =
|
||||
{
|
||||
enable = true;
|
||||
enableAliases = false;
|
||||
settings = {
|
||||
classic = false;
|
||||
blocks = [
|
||||
"permission"
|
||||
"user"
|
||||
"group"
|
||||
"size"
|
||||
"date"
|
||||
"name"
|
||||
];
|
||||
date = "date";
|
||||
dereference = false;
|
||||
icons = {
|
||||
when = "auto";
|
||||
theme = "fancy";
|
||||
separator = " ";
|
||||
};
|
||||
indicators = false;
|
||||
layout = "grid";
|
||||
recursion = {
|
||||
enabled = false;
|
||||
};
|
||||
size = "default";
|
||||
permission = "rwx";
|
||||
sorting = {
|
||||
column = "name";
|
||||
reverse = false;
|
||||
dir-grouping = "none";
|
||||
};
|
||||
no-symlink = false;
|
||||
total-size = false;
|
||||
hyperlink = "never";
|
||||
symlink-arrow = "⇒";
|
||||
header = false;
|
||||
};
|
||||
colors = {
|
||||
user = 230;
|
||||
group = 187;
|
||||
permission = {
|
||||
read = "dark_green";
|
||||
write = "dark_yellow";
|
||||
exec = "dark_red";
|
||||
exec-sticky = 5;
|
||||
no-access = 245;
|
||||
octal = 6;
|
||||
acl = "dark_cyan";
|
||||
context = "cyan";
|
||||
};
|
||||
date = {
|
||||
hour-old = 40;
|
||||
day-old = 42;
|
||||
older = 36;
|
||||
};
|
||||
size = {
|
||||
none = 245;
|
||||
small = 229;
|
||||
medium = 216;
|
||||
large = 172;
|
||||
};
|
||||
inode = {
|
||||
valid = 13;
|
||||
invalid = 245;
|
||||
};
|
||||
links = {
|
||||
valid = 13;
|
||||
invalid = 245;
|
||||
};
|
||||
tree-edge = 245;
|
||||
git-status = {
|
||||
default = 245;
|
||||
unmodified = 245;
|
||||
ignored = 245;
|
||||
new-in-index = "dark_green";
|
||||
new-in-workdir = "dark_green";
|
||||
typechange = "dark_yellow";
|
||||
deleted = "dark_red";
|
||||
renamed = "dark_green";
|
||||
modified = "dark_yellow";
|
||||
conflicted = "dark_red";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
10
home/neovim/default.nix
Normal file
10
home/neovim/default.nix
Normal file
@@ -0,0 +1,10 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
{
|
||||
xdg.configFile.nvim = {
|
||||
source = config.lib.file.mkOutOfStoreSymlink "${config.home.homeDirectory}/.dotfiles/home/neovim/nvim";
|
||||
recursive = true;
|
||||
};
|
||||
|
||||
home.packages = [ pkgs.neovim ];
|
||||
}
|
||||
8
home/neovim/nvim/.gitignore
vendored
Normal file
8
home/neovim/nvim/.gitignore
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
tt.*
|
||||
.tests
|
||||
doc/tags
|
||||
debug
|
||||
.repro
|
||||
foo.*
|
||||
*.log
|
||||
data
|
||||
15
home/neovim/nvim/.neoconf.json
Normal file
15
home/neovim/nvim/.neoconf.json
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"neodev": {
|
||||
"library": {
|
||||
"enabled": true,
|
||||
"plugins": true
|
||||
}
|
||||
},
|
||||
"neoconf": {
|
||||
"plugins": {
|
||||
"sumneko_lua": {
|
||||
"enabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
202
home/neovim/nvim/LICENSE
Normal file
202
home/neovim/nvim/LICENSE
Normal file
@@ -0,0 +1,202 @@
|
||||
Apache License
|
||||
Test
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
4
home/neovim/nvim/README.md
Normal file
4
home/neovim/nvim/README.md
Normal file
@@ -0,0 +1,4 @@
|
||||
# 💤 LazyVim
|
||||
|
||||
A starter template for [LazyVim](https://github.com/LazyVim/LazyVim).
|
||||
Refer to the [documentation](https://lazyvim.github.io/installation) to get started.
|
||||
532285
home/neovim/nvim/dictionary/de_neu.txt
Normal file
532285
home/neovim/nvim/dictionary/de_neu.txt
Normal file
File diff suppressed because it is too large
Load Diff
2
home/neovim/nvim/dictionary/de_user.txt
Normal file
2
home/neovim/nvim/dictionary/de_user.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
kogakure
|
||||
Imhoff
|
||||
118619
home/neovim/nvim/dictionary/en_us.txt
Normal file
118619
home/neovim/nvim/dictionary/en_us.txt
Normal file
File diff suppressed because it is too large
Load Diff
8
home/neovim/nvim/init.lua
Normal file
8
home/neovim/nvim/init.lua
Normal file
@@ -0,0 +1,8 @@
|
||||
-- bootstrap lazy.nvim, LazyVim and your plugins
|
||||
require("config.lazy")
|
||||
|
||||
-- Custom Highlight
|
||||
vim.api.nvim_set_hl(0, "WinSeparator", { fg = "#1F2334" })
|
||||
vim.api.nvim_set_hl(0, "DashboardHeader", { fg = "#A8CD76" })
|
||||
vim.api.nvim_set_hl(0, "DashboardFooter", { fg = "#A8CD76" })
|
||||
vim.api.nvim_set_hl(0, "DashboardIcon", { fg = "#A8CD76" })
|
||||
158
home/neovim/nvim/lazy-lock.json
Normal file
158
home/neovim/nvim/lazy-lock.json
Normal file
@@ -0,0 +1,158 @@
|
||||
{
|
||||
"ChatGPT.nvim": { "branch": "main", "commit": "f081338f07216a46d3915ce46c1fcb083bcb5016" },
|
||||
"CopilotChat.nvim": { "branch": "canary", "commit": "4a5e07185b37d3132e5541d8fa42aa874b774476" },
|
||||
"LazyVim": { "branch": "main", "commit": "12818a6cb499456f4903c5d8e68af43753ebc869" },
|
||||
"SchemaStore.nvim": { "branch": "main", "commit": "bb73383589c0aab431a100a014eed6cb0e1b3832" },
|
||||
"aerial.nvim": { "branch": "master", "commit": "e75a3df2c20b3a98c786f5e61587d74a7a6b61d6" },
|
||||
"auto-save.nvim": { "branch": "main", "commit": "979b6c82f60cfa80f4cf437d77446d0ded0addf0" },
|
||||
"aw-watcher-vim": { "branch": "master", "commit": "4ba86d05a940574000c33f280fd7f6eccc284331" },
|
||||
"baleia.nvim": { "branch": "main", "commit": "1b25eac3ac03659c3d3af75c7455e179e5f197f7" },
|
||||
"barbecue": { "branch": "main", "commit": "cd7e7da622d68136e13721865b4d919efd6325ed" },
|
||||
"base16-vim": { "branch": "master", "commit": "3be3cd82cd31acfcab9a41bad853d9c68d30478d" },
|
||||
"blamer.nvim": { "branch": "master", "commit": "e0d43c11697300eb68f00d69df8b87deb0bf52dc" },
|
||||
"bufferline.nvim": { "branch": "main", "commit": "0b2fd861eee7595015b6561dade52fb060be10c4" },
|
||||
"catppuccin": { "branch": "main", "commit": "10eda02ea4faa7d1f94e77a3410a4ae91c25c5f5" },
|
||||
"chafa.nvim": { "branch": "main", "commit": "792c8f4f0e86b5e27c3602be4614f886f3a12a5a" },
|
||||
"cheatsheet.nvim": { "branch": "master", "commit": "9716f9aaa94dd1fd6ce59b5aae0e5f25e2a463ef" },
|
||||
"cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" },
|
||||
"cmp-npm": { "branch": "main", "commit": "2337f109f51a09297596dd6b538b70ccba92b4e4" },
|
||||
"cmp-nvim-lsp": { "branch": "main", "commit": "39e2eda76828d88b773cc27a3f61d2ad782c922d" },
|
||||
"cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" },
|
||||
"codeium.nvim": { "branch": "main", "commit": "f6a2ef32a9e923cb0104a19d3e426b0e40e49505" },
|
||||
"codewindow.nvim": { "branch": "master", "commit": "dd7017617962943eb1d152fc58940f11c6775a4a" },
|
||||
"committia.vim": { "branch": "master", "commit": "a187b8633694027ab5ef8a834527d33093282f95" },
|
||||
"conform.nvim": { "branch": "master", "commit": "25d48271e3d4404ba017cb92a37d3a681c1ad149" },
|
||||
"copilot-cmp": { "branch": "master", "commit": "b6e5286b3d74b04256d0a7e3bd2908eabec34b44" },
|
||||
"copilot.lua": { "branch": "master", "commit": "86537b286f18783f8b67bccd78a4ef4345679625" },
|
||||
"dashboard-nvim": { "branch": "master", "commit": "fabf5feec96185817c732d47d363f34034212685" },
|
||||
"dial.nvim": { "branch": "master", "commit": "ed4d6a5bbd5e479b4c4a3019d148561a2e6c1490" },
|
||||
"diffview.nvim": { "branch": "main", "commit": "4516612fe98ff56ae0415a259ff6361a89419b0a" },
|
||||
"dressing.nvim": { "branch": "master", "commit": "6741f1062d3dc6e4755367a7e9b347b553623f04" },
|
||||
"editorconfig-vim": { "branch": "master", "commit": "8b7da79e9daee7a3f3a8d4fe29886b9756305aff" },
|
||||
"emmet-vim": { "branch": "master", "commit": "3fb2f63799e1922f7647ed9ff3b32154031a76ee" },
|
||||
"export-to-vscode.nvim": { "branch": "main", "commit": "7746bb67d03f6a6891cdedc8c760c95a5714fe8c" },
|
||||
"flash.nvim": { "branch": "main", "commit": "34c7be146a91fec3555c33fe89c7d643f6ef5cf1" },
|
||||
"fm-nvim": { "branch": "master", "commit": "8e6a77049330e7c797eb9e63affd75eb796fe75e" },
|
||||
"friendly-snippets": { "branch": "main", "commit": "00ebcaa159e817150bd83bfe2d51fa3b3377d5c4" },
|
||||
"fzf": { "branch": "master", "commit": "d9404fcce45be6a95d697fb2229e77e5ac8bb0c4" },
|
||||
"fzf-lua": { "branch": "main", "commit": "c7288e60b8dde218f3d3b5b16e1baf32ada20ef3" },
|
||||
"fzf.vim": { "branch": "master", "commit": "f7c7b44764a601e621432b98c85709c9a53a7be8" },
|
||||
"gen.nvim": { "branch": "main", "commit": "07fb74cf1bc533791e2c7cfca7bd3f45a3b597f9" },
|
||||
"gh.nvim": { "branch": "main", "commit": "ebbaac254ef7dd6f85b439825fbce82d0dc84515" },
|
||||
"gitsigns.nvim": { "branch": "main", "commit": "f074844b60f9e151970fbcdbeb8a2cd52b6ef25a" },
|
||||
"grug-far.nvim": { "branch": "main", "commit": "4e18623ec055273e7c2e925e644a5dbba89b509e" },
|
||||
"harpoon": { "branch": "harpoon2", "commit": "0378a6c428a0bed6a2781d459d7943843f374bce" },
|
||||
"harpoon-lualine": { "branch": "master", "commit": "d1b873c19b701fd80d60a67d086dbb3bcc4eb00e" },
|
||||
"highlight-undo.nvim": { "branch": "main", "commit": "1ea1c79372d7d93c88fd97543880927b7635e3d2" },
|
||||
"inc-rename.nvim": { "branch": "main", "commit": "8ba77017ca468f3029bf88ef409c2d20476ea66b" },
|
||||
"indent-blankline.nvim": { "branch": "master", "commit": "65e20ab94a26d0e14acac5049b8641336819dfc7" },
|
||||
"lazy.nvim": { "branch": "main", "commit": "077102c5bfc578693f12377846d427f49bc50076" },
|
||||
"lazydev.nvim": { "branch": "main", "commit": "491452cf1ca6f029e90ad0d0368848fac717c6d2" },
|
||||
"lazygit.nvim": { "branch": "main", "commit": "dc56df433bfbf107fee0139e187eb9750878fa84" },
|
||||
"legendary.nvim": { "branch": "master", "commit": "543bbbba4e7b54222362f312e1d2e3dac1eaae75" },
|
||||
"lf.nvim": { "branch": "master", "commit": "69ab1efcffee6928bf68ac9bd0c016464d9b2c8b" },
|
||||
"litee.nvim": { "branch": "main", "commit": "4efaf373322d9e71eaff31164abb393417cc6f6a" },
|
||||
"lsp-progress.nvim": { "branch": "main", "commit": "d5f4d28efe75ce636bfbe271eb45f39689765aab" },
|
||||
"lualine.nvim": { "branch": "master", "commit": "544dd1583f9bb27b393f598475c89809c4d5e86b" },
|
||||
"lush.nvim": { "branch": "main", "commit": "6a254139d077ad53be7e4f3602c8da0c84447fd9" },
|
||||
"luvit-meta": { "branch": "main", "commit": "ce76f6f6cdc9201523a5875a4471dcfe0186eb60" },
|
||||
"markdown-preview.nvim": { "branch": "master", "commit": "a923f5fc5ba36a3b17e289dc35dc17f66d0548ee" },
|
||||
"mason-lspconfig.nvim": { "branch": "main", "commit": "ba9c2f0b93deb48d0a99ae0e8d8dd36f7cc286d6" },
|
||||
"mason-nvim-dap.nvim": { "branch": "main", "commit": "4ba55f9755ebe8297d92c419b90a946123292ae6" },
|
||||
"mason.nvim": { "branch": "main", "commit": "e2f7f9044ec30067bc11800a9e266664b88cda22" },
|
||||
"mini.ai": { "branch": "main", "commit": "45587078f323eaf41b9f701bbc04f8d1ab008979" },
|
||||
"mini.animate": { "branch": "main", "commit": "320fb35460238c436407cd779f63abad98e84870" },
|
||||
"mini.icons": { "branch": "main", "commit": "fe63fe080e76d80713557e5f0c65bc15b14b152d" },
|
||||
"mini.pairs": { "branch": "main", "commit": "927d19cbdd0e752ab1c7eed87072e71d2cd6ff51" },
|
||||
"mini.surround": { "branch": "main", "commit": "57caca9525cec0ea771a67326b0ee637d056078a" },
|
||||
"neo-tree.nvim": { "branch": "main", "commit": "206241e451c12f78969ff5ae53af45616ffc9b72" },
|
||||
"neogit": { "branch": "master", "commit": "2b74a777b963dfdeeabfabf84d5ba611666adab4" },
|
||||
"neotest": { "branch": "master", "commit": "32ff2ac21135a372a42b38ae131e531e64833bd3" },
|
||||
"neotest-golang": { "branch": "main", "commit": "41cf5e59ca132a5cad599867de3f154429e5c148" },
|
||||
"neotest-jest": { "branch": "main", "commit": "514fd4eae7da15fd409133086bb8e029b65ac43f" },
|
||||
"neotest-rspec": { "branch": "main", "commit": "48573d5882cbe8d8bcd3b735d9ee7705168b1b87" },
|
||||
"neotest-vitest": { "branch": "main", "commit": "353364aa05b94b09409cbef21b79c97c5564e2ce" },
|
||||
"night-owl.nvim": { "branch": "main", "commit": "131641a516085c5b3cacc8022581902e9f2f14af" },
|
||||
"noctis.nvim": { "branch": "main", "commit": "0b9336e39c686a7e58de06e4dd38c2bd862a7b33" },
|
||||
"noice.nvim": { "branch": "main", "commit": "448bb9c524a7601035449210838e374a30153172" },
|
||||
"nui.nvim": { "branch": "main", "commit": "61574ce6e60c815b0a0c4b5655b8486ba58089a1" },
|
||||
"nvim-cmp": { "branch": "main", "commit": "d818fd0624205b34e14888358037fb6f5dc51234" },
|
||||
"nvim-colorizer.lua": { "branch": "master", "commit": "194ec600488f7c7229668d0e80bd197f3a2b84ff" },
|
||||
"nvim-cursorline": { "branch": "main", "commit": "804f0023692653b2b2368462d67d2a87056947f9" },
|
||||
"nvim-dap": { "branch": "master", "commit": "bc03b83c94d0375145ff5ac6a6dcf28c1241e06f" },
|
||||
"nvim-dap-go": { "branch": "main", "commit": "5030d53097fed7b75524a04048d8dbf417fa0140" },
|
||||
"nvim-dap-ruby": { "branch": "main", "commit": "4176405d186a93ebec38a6344df124b1689cfcfd" },
|
||||
"nvim-dap-ui": { "branch": "master", "commit": "a5606bc5958db86f8d92803bea7400ee26a8d7e4" },
|
||||
"nvim-dap-virtual-text": { "branch": "master", "commit": "484995d573c0f0563f6a66ebdd6c67b649489615" },
|
||||
"nvim-lint": { "branch": "master", "commit": "efc6fc83f0772283e064c53a8f9fb5645bde0bc0" },
|
||||
"nvim-lspconfig": { "branch": "master", "commit": "fdc44768a09a65140aa00c92872a5381ad486485" },
|
||||
"nvim-navic": { "branch": "master", "commit": "8649f694d3e76ee10c19255dece6411c29206a54" },
|
||||
"nvim-nio": { "branch": "master", "commit": "a428f309119086dc78dd4b19306d2d67be884eee" },
|
||||
"nvim-notify": { "branch": "master", "commit": "d333b6f167900f6d9d42a59005d82919830626bf" },
|
||||
"nvim-silicon": { "branch": "main", "commit": "feb882f04c992b797daa118101a239fb3bedfc04" },
|
||||
"nvim-snippets": { "branch": "main", "commit": "56b4052f71220144689caaa2e5b66222ba5661eb" },
|
||||
"nvim-transparent": { "branch": "main", "commit": "fd35a46f4b7c1b244249266bdcb2da3814f01724" },
|
||||
"nvim-treesitter": { "branch": "master", "commit": "8e569bc4b5eee3ef011c948f92493fda2e2a6a32" },
|
||||
"nvim-treesitter-textobjects": { "branch": "master", "commit": "34867c69838078df7d6919b130c0541c0b400c47" },
|
||||
"nvim-ts-autotag": { "branch": "main", "commit": "dc5e1687ab76ee02e0f11c5ce137f530b36e98b3" },
|
||||
"nvim-ufo": { "branch": "main", "commit": "1b5f2838099f283857729e820cc05e2b19df7a2c" },
|
||||
"nvim-various-textobjs": { "branch": "main", "commit": "82ba233ec6f4de0e1d577c55140e6d31019d3369" },
|
||||
"nvim-web-devicons": { "branch": "master", "commit": "5be6c4e685618b99c3210a69375b38a1202369b4" },
|
||||
"oatmeal.nvim": { "branch": "master", "commit": "c8cdd0a182cf77f88ea5fa4703229ddb3f47c1f7" },
|
||||
"obsidian.nvim": { "branch": "main", "commit": "ae1f76a75c7ce36866e1d9342a8f6f5b9c2caf9b" },
|
||||
"oil.nvim": { "branch": "master", "commit": "fcca212c2e966fc3dec1d4baf888e670631d25d1" },
|
||||
"persistence.nvim": { "branch": "main", "commit": "f6aad7dde7fcf54148ccfc5f622c6d5badd0cc3d" },
|
||||
"plenary.nvim": { "branch": "master", "commit": "a3e3bc82a3f95c5ed0d7201546d5d2c19b20d683" },
|
||||
"popup.nvim": { "branch": "master", "commit": "b7404d35d5d3548a82149238289fa71f7f6de4ac" },
|
||||
"project.nvim": { "branch": "main", "commit": "8c6bad7d22eef1b71144b401c9f74ed01526a4fb" },
|
||||
"promise-async": { "branch": "main", "commit": "28c1d5a295eb5310afa2523d4ae9aa41ec5a9de2" },
|
||||
"rainbow_csv": { "branch": "master", "commit": "3dbbfd7d17536aebfb80f571255548495574c32b" },
|
||||
"remote-nvim.nvim": { "branch": "main", "commit": "66fc20fd259401c7bb6ac5189ecb6283c2eb65d2" },
|
||||
"smart-open.nvim": { "branch": "0.2.x", "commit": "87626ee8748b9bba22093adec7bb58c63e7214f0" },
|
||||
"smart-splits.nvim": { "branch": "master", "commit": "209c136a5bee236094245196986ce94920dd3fdf" },
|
||||
"sqlite.lua": { "branch": "master", "commit": "d0ffd703b56d090d213b497ed4eb840495f14a11" },
|
||||
"symbols-outline.nvim": { "branch": "master", "commit": "564ee65dfc9024bdde73a6621820866987cbb256" },
|
||||
"tabular": { "branch": "master", "commit": "12437cd1b53488e24936ec4b091c9324cafee311" },
|
||||
"tailwind-sorter.nvim": { "branch": "main", "commit": "1b60096635a1a1bef6b36b6c88a61ff437df5a15" },
|
||||
"tailwind-tools.nvim": { "branch": "master", "commit": "9baed3c610bc80299046db02d26e5deb66323c36" },
|
||||
"tailwindcss-colorizer-cmp.nvim": { "branch": "main", "commit": "3d3cd95e4a4135c250faf83dd5ed61b8e5502b86" },
|
||||
"telescope-file-browser.nvim": { "branch": "master", "commit": "8574946bf6d0d820d7f600f3db808f5900a2ae23" },
|
||||
"telescope-frecency.nvim": { "branch": "master", "commit": "cef01dee8bd07540216c4e4bf429565a86f68d6d" },
|
||||
"telescope-fzf-native.nvim": { "branch": "main", "commit": "cf48d4dfce44e0b9a2e19a008d6ec6ea6f01a83b" },
|
||||
"telescope-fzy-native.nvim": { "branch": "master", "commit": "282f069504515eec762ab6d6c89903377252bf5b" },
|
||||
"telescope-github.nvim": { "branch": "master", "commit": "ee95c509901c3357679e9f2f9eaac3561c811736" },
|
||||
"telescope-heading.nvim": { "branch": "main", "commit": "e85c0f69cb64048f56e76548dcb2f10277576df9" },
|
||||
"telescope-import.nvim": { "branch": "main", "commit": "baa2d50be46c769a1cc942a9d5be049f314f4206" },
|
||||
"telescope-live-grep-args.nvim": { "branch": "master", "commit": "649b662a8f476fd2c0289570764459e95ebaa3f3" },
|
||||
"telescope-node-modules.nvim": { "branch": "main", "commit": "b846d33ff5763176dc14fc74c30941a2067c82fd" },
|
||||
"telescope-undo.nvim": { "branch": "main", "commit": "51be9ae7c42fc27c0b05505e3a0162e0f05fbb6a" },
|
||||
"telescope.nvim": { "branch": "master", "commit": "10b8a82b042caf50b78e619d92caf0910211973d" },
|
||||
"tmux-awesome-manager.nvim": { "branch": "master", "commit": "f266ba588249965a16df77bca3f8e9a241156d37" },
|
||||
"todo-comments.nvim": { "branch": "main", "commit": "8f45f353dc3649cb9b44cecda96827ea88128584" },
|
||||
"toggleterm.nvim": { "branch": "main", "commit": "8ed0f52006d3207ec6c94de7db62da840937ef2a" },
|
||||
"tokyonight.nvim": { "branch": "main", "commit": "b0e7c7382a7e8f6456f2a95655983993ffda745e" },
|
||||
"trouble.nvim": { "branch": "main", "commit": "6efc446226679fda0547c0fd6a7892fd5f5b15d8" },
|
||||
"ts-comments.nvim": { "branch": "main", "commit": "98d7d4dec0af1312d38e288f800bbf6ff562b6ab" },
|
||||
"twilight.nvim": { "branch": "main", "commit": "1584c0b0a979b71fd86b18d302ba84e9aba85b1b" },
|
||||
"vim-abolish": { "branch": "master", "commit": "dcbfe065297d31823561ba787f51056c147aa682" },
|
||||
"vim-astro": { "branch": "main", "commit": "9b4674ecfe1dd84b5fb9b4de1653975de6e8e2e1" },
|
||||
"vim-bookmarks": { "branch": "master", "commit": "9cc5fa7ecc23b052bd524d07c85356c64b92aeef" },
|
||||
"vim-fugitive": { "branch": "master", "commit": "0444df68cd1cdabc7453d6bd84099458327e5513" },
|
||||
"vim-gh-line": { "branch": "master", "commit": "731751fdfa4f64a061dbc7088cb7b2f12e0828ad" },
|
||||
"vim-grammarous": { "branch": "master", "commit": "db46357465ce587d5325e816235b5e92415f8c05" },
|
||||
"vim-markdown": { "branch": "master", "commit": "a657e697376909c41475a686eeef7fc7a4972d94" },
|
||||
"vim-mundo": { "branch": "master", "commit": "2ceda8c65f7b3f9066820729fc02003a09df91f9" },
|
||||
"vim-nix": { "branch": "master", "commit": "e25cd0f2e5922f1f4d3cd969f92e35a9a327ffb0" },
|
||||
"vim-table-mode": { "branch": "master", "commit": "e4365bde024f73e205eefa2fb78e3029ddb92ea9" },
|
||||
"vim-tmux-navigator": { "branch": "master", "commit": "5b3c701686fb4e6629c100ed32e827edf8dad01e" },
|
||||
"vim-visincr": { "branch": "master", "commit": "57cd943a31b0b5ec36a884b5b5b8758843c74c1a" },
|
||||
"vim-visual-multi": { "branch": "master", "commit": "38b0e8d94a5499ccc17d6159763d32c79f53417b" },
|
||||
"vim-wakatime": { "branch": "master", "commit": "53bba6bb8342de9cbdafc82142a9b5e82008d858" },
|
||||
"vim-xtract": { "branch": "master", "commit": "65e47be935080f112f219b5f0bc1bf411c783f27" },
|
||||
"vimux": { "branch": "master", "commit": "c4ffa0b992798f3362b27642088dccb251aaef1e" },
|
||||
"which-key.nvim": { "branch": "main", "commit": "6c1584eb76b55629702716995cca4ae2798a9cca" },
|
||||
"worktrees.nvim": { "branch": "main", "commit": "9b705e702b29297009702e492c28c0277a5bb8fa" },
|
||||
"wrapping.nvim": { "branch": "master", "commit": "3a823200c297885b70515fa8d974e1763c578e26" },
|
||||
"yanky.nvim": { "branch": "main", "commit": "73215b77d22ebb179cef98e7e1235825431d10e4" },
|
||||
"zen-mode.nvim": { "branch": "main", "commit": "29b292bdc58b76a6c8f294c961a8bf92c5a6ebd6" }
|
||||
}
|
||||
15
home/neovim/nvim/lazyvim.json
Normal file
15
home/neovim/nvim/lazyvim.json
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"extras": [
|
||||
"lazyvim.plugins.extras.coding.copilot",
|
||||
"lazyvim.plugins.extras.dap.core",
|
||||
"lazyvim.plugins.extras.editor.aerial",
|
||||
"lazyvim.plugins.extras.formatting.prettier",
|
||||
"lazyvim.plugins.extras.lang.go",
|
||||
"lazyvim.plugins.extras.lang.tailwind",
|
||||
"lazyvim.plugins.extras.lang.yaml"
|
||||
],
|
||||
"news": {
|
||||
"NEWS.md": "6520"
|
||||
},
|
||||
"version": 6
|
||||
}
|
||||
55
home/neovim/nvim/lua/config/autocmds.lua
Normal file
55
home/neovim/nvim/lua/config/autocmds.lua
Normal file
@@ -0,0 +1,55 @@
|
||||
-- Autocmds are automatically loaded on the VeryLazy event
|
||||
-- Default autocmds that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/autocmds.lua
|
||||
-- Add any additional autocmds here
|
||||
|
||||
-- Reload tmux config on save
|
||||
vim.api.nvim_create_autocmd("BufWritePost", {
|
||||
pattern = { "*tmux.conf" },
|
||||
command = "execute 'silent !tmux source <afile> --silent'",
|
||||
})
|
||||
|
||||
-- Reload gitmux config on save
|
||||
vim.api.nvim_create_autocmd({ "BufRead" }, {
|
||||
pattern = { "gitmux.conf" },
|
||||
callback = function()
|
||||
vim.cmd([[set filetype=sh]])
|
||||
end,
|
||||
})
|
||||
|
||||
-- Restart yabai on config save
|
||||
vim.api.nvim_create_autocmd("BufWritePost", {
|
||||
pattern = { ".yabairc" },
|
||||
command = "!yabai --restart-service",
|
||||
})
|
||||
|
||||
-- Add specific settings for Markdown files
|
||||
vim.api.nvim_create_autocmd({ "BufNewFile", "BufFilePre", "BufRead" }, {
|
||||
pattern = { "*.mdx", "*.md" },
|
||||
callback = function()
|
||||
vim.cmd([[set wrap linebreak nolist]])
|
||||
vim.cmd([[SoftWrapMode]])
|
||||
end,
|
||||
})
|
||||
|
||||
-- Evenly resize windows after resizing
|
||||
vim.api.nvim_create_autocmd({ "VimResized" }, {
|
||||
pattern = { "*" },
|
||||
callback = function()
|
||||
vim.cmd([[tabdo wincmd =]])
|
||||
end,
|
||||
})
|
||||
|
||||
-- Turn off paste mode when leaving insert mode
|
||||
vim.api.nvim_create_autocmd("InsertLeave", {
|
||||
pattern = { "*" },
|
||||
command = "set nopaste",
|
||||
})
|
||||
|
||||
-- Change conceallevel for JSON files
|
||||
vim.api.nvim_create_autocmd("FileType", {
|
||||
pattern = { "json", "jsonc" },
|
||||
callback = function()
|
||||
vim.wo.spell = false
|
||||
vim.wo.conceallevel = 0
|
||||
end,
|
||||
})
|
||||
51
home/neovim/nvim/lua/config/keymaps.lua
Normal file
51
home/neovim/nvim/lua/config/keymaps.lua
Normal file
@@ -0,0 +1,51 @@
|
||||
-- Keymaps are automatically loaded on the VeryLazy event
|
||||
-- Default keymaps that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/keymaps.lua
|
||||
-- Add any additional keymaps here
|
||||
rawset(_G, "vim", vim or {})
|
||||
|
||||
vim.keymap.set("n", "<leader>j", ":b#<CR>", { desc = "Toggle between buffers", noremap = true, silent = true })
|
||||
vim.keymap.set("n", ";;", "A;<ESC>", { desc = "Add semicolon to the end of the line", noremap = true, silent = true })
|
||||
vim.keymap.set("n", ",,", "A,<ESC>", { desc = "Add comma to the end of the line", noremap = true, silent = true })
|
||||
-- stylua: ignore
|
||||
vim.keymap.set("v", "y", "myy`y", { desc = "Maintain the cursor position when yanking a visual selection", noremap = true, silent = true })
|
||||
vim.keymap.set("n", "+", "<C-a>", { desc = "Increment", noremap = true, silent = true })
|
||||
vim.keymap.set("n", "-", "<C-x>", { desc = "Decrement", noremap = true, silent = true })
|
||||
vim.keymap.set("n", "<leader>bx", ":bufdo bdelete<CR>", { desc = "Delete all buffers", noremap = true, silent = true })
|
||||
vim.keymap.set("n", "<leader>bsd", "<cmd>%bd|e#|bd#<cr>|'<cr>", { desc = "Delete surrounding buffers" })
|
||||
vim.keymap.set("n", "<leader>ut", ":set list!<CR>", { desc = "Toggle list", noremap = true, silent = true })
|
||||
vim.keymap.set("n", "Y", "yg$", { desc = "Copy to the end of the line", noremap = true, silent = true })
|
||||
-- stylua: ignore
|
||||
vim.keymap.set("n", "n", "nzzzv", { desc = "Keep the window centered (next search result)", noremap = true, silent = true })
|
||||
-- stylua: ignore
|
||||
vim.keymap.set("n", "N", "Nzzzv", { desc = "Keep the window centered (previous search result)", noremap = true, silent = true })
|
||||
-- stylua: ignore
|
||||
vim.keymap.set("n", "<expr> j", "(v:count == 0 ? 'gj' : 'j')", { desc = "Move by rows in wrapped mode (down)", noremap = true, silent = true })
|
||||
-- stylua: ignore
|
||||
vim.keymap.set("n", "<expr> k", "(v:count == 0 ? 'gk' : 'k')", { desc = "Move by rows in wrapped mode (up)", noremap = true, silent = true })
|
||||
vim.keymap.set("n", "gP", "`[v`]", { desc = "Visually select of just pasted content", noremap = true, silent = true })
|
||||
vim.keymap.set("n", "gy", "`[v`]y", { desc = "Visually select of just pasted content", noremap = true, silent = true })
|
||||
-- stylua: ignore
|
||||
vim.keymap.set("n", "<leader>wi", ":silent !open -a iA\\ Writer.app '%:p'<CR>", { desc = "Open in iA Writer", noremap = true, silent = true })
|
||||
|
||||
vim.keymap.set("n", "-", "<CMD>foldclose<CR>", { desc = "Close code fold" })
|
||||
vim.keymap.set("n", "+", "<CMD>foldopen<CR>", { desc = "Open code fold" })
|
||||
|
||||
vim.keymap.set("n", "<C-h>", function()
|
||||
require("smart-splits").move_cursor_left()
|
||||
end)
|
||||
vim.keymap.set("n", "<C-j>", function()
|
||||
require("smart-splits").move_cursor_down()
|
||||
end)
|
||||
vim.keymap.set("n", "<C-k>", function()
|
||||
require("smart-splits").move_cursor_up()
|
||||
end)
|
||||
vim.keymap.set("n", "<C-l>", function()
|
||||
require("smart-splits").move_cursor_right()
|
||||
end)
|
||||
|
||||
vim.keymap.set("n", "[b", "<cmd>bprevious<cr>", { desc = "Prev buffer" })
|
||||
vim.keymap.set("n", "]b", "<cmd>bnext<cr>", { desc = "Next buffer" })
|
||||
|
||||
-- Visual Mode
|
||||
vim.keymap.set("v", "<", "<gv", { desc = "Stay in indent mode (left)", noremap = true, silent = true })
|
||||
vim.keymap.set("v", ">", ">gv", { desc = "Stay in indent mode (right)", noremap = true, silent = true })
|
||||
67
home/neovim/nvim/lua/config/lazy.lua
Normal file
67
home/neovim/nvim/lua/config/lazy.lua
Normal file
@@ -0,0 +1,67 @@
|
||||
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
|
||||
if not vim.loop.fs_stat(lazypath) then
|
||||
-- bootstrap lazy.nvim
|
||||
-- stylua: ignore
|
||||
vim.fn.system({ "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", "--branch=stable", lazypath })
|
||||
end
|
||||
|
||||
vim.opt.rtp:prepend(vim.env.LAZY or lazypath)
|
||||
vim.cmd([[command! -nargs=0 GoToFile :Telescope find_files]])
|
||||
vim.cmd([[command! -nargs=0 GoToCommand :Telescope commands]])
|
||||
vim.cmd([[command! -nargs=0 Grep :Telescope live_grep]])
|
||||
|
||||
require("lazy").setup({
|
||||
spec = {
|
||||
-- add LazyVim and import its plugins
|
||||
{ "LazyVim/LazyVim", import = "lazyvim.plugins" },
|
||||
-- import any extras modules here
|
||||
{ import = "lazyvim.plugins.extras.coding.codeium" },
|
||||
{ import = "lazyvim.plugins.extras.coding.copilot" },
|
||||
{ import = "lazyvim.plugins.extras.coding.mini-surround" },
|
||||
{ import = "lazyvim.plugins.extras.dap.core" },
|
||||
{ import = "lazyvim.plugins.extras.editor.aerial" },
|
||||
{ import = "lazyvim.plugins.extras.editor.harpoon2" },
|
||||
{ import = "lazyvim.plugins.extras.formatting.prettier" },
|
||||
{ import = "lazyvim.plugins.extras.lang.go" },
|
||||
{ import = "lazyvim.plugins.extras.lang.json" },
|
||||
{ import = "lazyvim.plugins.extras.lang.ruby" },
|
||||
{ import = "lazyvim.plugins.extras.lang.tailwind" },
|
||||
{ import = "lazyvim.plugins.extras.lang.typescript" },
|
||||
{ import = "lazyvim.plugins.extras.lang.yaml" },
|
||||
{ import = "lazyvim.plugins.extras.linting.eslint" },
|
||||
{ import = "lazyvim.plugins.extras.test.core" },
|
||||
{ import = "lazyvim.plugins.extras.ui.mini-animate" },
|
||||
-- import/override with your plugins
|
||||
{ import = "plugins" },
|
||||
},
|
||||
defaults = {
|
||||
-- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup.
|
||||
-- If you know what you're doing, you can set this to `true` to have all your custom plugins lazy-loaded by default.
|
||||
lazy = false,
|
||||
-- It's recommended to leave version=false for now, since a lot the plugin that support versioning,
|
||||
-- have outdated releases, which may break your Neovim install.
|
||||
version = false, -- always use the latest git commit
|
||||
-- version = "*", -- try installing the latest stable version for plugins that support semver
|
||||
},
|
||||
install = { colorscheme = { "tokyonight", "habamax" } },
|
||||
checker = {
|
||||
enabled = true,
|
||||
notify = false,
|
||||
frequency = 86400,
|
||||
},
|
||||
performance = {
|
||||
rtp = {
|
||||
-- disable some rtp plugins
|
||||
disabled_plugins = {
|
||||
"gzip",
|
||||
-- "matchit",
|
||||
-- "matchparen",
|
||||
-- "netrwPlugin",
|
||||
"tarPlugin",
|
||||
"tohtml",
|
||||
"tutor",
|
||||
"zipPlugin",
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
48
home/neovim/nvim/lua/config/options.lua
Normal file
48
home/neovim/nvim/lua/config/options.lua
Normal file
@@ -0,0 +1,48 @@
|
||||
-- Options are automatically loaded before lazy.nvim startup
|
||||
-- Default options that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/options.lua
|
||||
-- Add any additional options here
|
||||
vim.opt.autowrite = true
|
||||
vim.opt.backspace = { "indent", "eol", "start" } -- Intuitive backspacing
|
||||
vim.opt.copyindent = true
|
||||
vim.opt.foldlevel = 2
|
||||
vim.opt.fillchars = "fold: "
|
||||
vim.opt.cursorline = false
|
||||
vim.opt.foldlevelstart = 99
|
||||
vim.opt.foldmethod = "indent"
|
||||
vim.opt.foldnestmax = 10
|
||||
vim.opt.grepprg = "rg --vimgrep --no-heading --smart-case"
|
||||
vim.opt.listchars = { tab = "↦ ", trail = "·", nbsp = ".", extends = "❯", precedes = "❮" }
|
||||
vim.opt.showbreak = "↪"
|
||||
vim.opt.shiftwidth = 2
|
||||
vim.opt.softtabstop = 2
|
||||
vim.opt.tabstop = 2
|
||||
vim.opt.title = true
|
||||
vim.opt.swapfile = false
|
||||
vim.opt.virtualedit = "block,insert"
|
||||
vim.opt.conceallevel = 2
|
||||
|
||||
vim.opt.iskeyword:append("-") -- Add dashes to words
|
||||
vim.opt.wildignore:append({ "*/node_modules/*" }) -- Wildignore
|
||||
vim.opt.complete:append({ "i", "k", "s", "kspell" })
|
||||
|
||||
-- Only the project root should be the root
|
||||
vim.g.root_spec = { ".git" }
|
||||
|
||||
-- Undercurl
|
||||
vim.cmd([[let &t_Cs = "\e[4:3m"]])
|
||||
vim.cmd([[let &t_Ce = "\e[4:0m"]])
|
||||
|
||||
-- FIXME: When using "vim.opt.spellfile:append("~/.config/…) the file is not writable"
|
||||
vim.cmd([[
|
||||
" Spell Checker
|
||||
set spellfile+=~/.config/nvim/spell/en.utf-8.add
|
||||
|
||||
" Custom Dictionaries (<C-x> <C-k>)
|
||||
set dictionary+=~/.config/nvim/dictionary/de_user.txt
|
||||
set dictionary+=~/.config/nvim/dictionary/de_neu.txt
|
||||
set dictionary+=~/.config/nvim/dictionary/en_us.txt
|
||||
|
||||
" Custom Thesauri (Synonyms) (<C-x> <C-t>)
|
||||
set thesaurus+=~/.config/nvim/thesaurus/de_user.txt
|
||||
set thesaurus+=~/.config/nvim/thesaurus/de_openthesaurus.txt
|
||||
]])
|
||||
177
home/neovim/nvim/lua/lualine/themes/custom.lua
Normal file
177
home/neovim/nvim/lua/lualine/themes/custom.lua
Normal file
@@ -0,0 +1,177 @@
|
||||
-- Copyright (c) 2020-2021 shadmansaleh
|
||||
-- MIT license, see LICENSE for more details.
|
||||
local utils = require("lualine.utils.utils")
|
||||
local loader = require("lualine.utils.loader")
|
||||
|
||||
local custom = {
|
||||
A = "#1F2335",
|
||||
B = "#24283B",
|
||||
}
|
||||
|
||||
local color_name = vim.g.colors_name
|
||||
if color_name then
|
||||
-- All base16 colorschemes share the same theme
|
||||
if "base16" == color_name:sub(1, 6) then
|
||||
color_name = "base16"
|
||||
end
|
||||
|
||||
-- Check if there's a theme for current colorscheme
|
||||
-- If there is load that instead of generating a new one
|
||||
local ok, theme = pcall(loader.load_theme, color_name)
|
||||
if ok and theme then
|
||||
return theme
|
||||
end
|
||||
end
|
||||
|
||||
---------------
|
||||
-- Constants --
|
||||
---------------
|
||||
-- fg and bg must have this much contrast range 0 < contrast_threshold < 0.5
|
||||
local contrast_threshold = 0.3
|
||||
-- how much brightness is changed in percentage for light and dark themes
|
||||
local brightness_modifier_parameter = 10
|
||||
|
||||
-- Turns #rrggbb -> { red, green, blue }
|
||||
local function rgb_str2num(rgb_color_str)
|
||||
if rgb_color_str:find("#") == 1 then
|
||||
rgb_color_str = rgb_color_str:sub(2, #rgb_color_str)
|
||||
end
|
||||
local red = tonumber(rgb_color_str:sub(1, 2), 16)
|
||||
local green = tonumber(rgb_color_str:sub(3, 4), 16)
|
||||
local blue = tonumber(rgb_color_str:sub(5, 6), 16)
|
||||
return { red = red, green = green, blue = blue }
|
||||
end
|
||||
|
||||
-- Turns { red, green, blue } -> #rrggbb
|
||||
local function rgb_num2str(rgb_color_num)
|
||||
local rgb_color_str = string.format("#%02x%02x%02x", rgb_color_num.red, rgb_color_num.green, rgb_color_num.blue)
|
||||
return rgb_color_str
|
||||
end
|
||||
|
||||
-- Returns brightness level of color in range 0 to 1
|
||||
-- arbitrary value it's basically an weighted average
|
||||
local function get_color_brightness(rgb_color)
|
||||
local color = rgb_str2num(rgb_color)
|
||||
local brightness = (color.red * 2 + color.green * 3 + color.blue) / 6
|
||||
return brightness / 256
|
||||
end
|
||||
|
||||
-- returns average of colors in range 0 to 1
|
||||
-- used to determine contrast level
|
||||
local function get_color_avg(rgb_color)
|
||||
local color = rgb_str2num(rgb_color)
|
||||
return (color.red + color.green + color.blue) / 3 / 256
|
||||
end
|
||||
|
||||
-- Clamps the val between left and right
|
||||
local function clamp(val, left, right)
|
||||
if val > right then
|
||||
return right
|
||||
end
|
||||
if val < left then
|
||||
return left
|
||||
end
|
||||
return val
|
||||
end
|
||||
|
||||
-- Changes brightness of rgb_color by percentage
|
||||
local function brightness_modifier(rgb_color, parcentage)
|
||||
local color = rgb_str2num(rgb_color)
|
||||
color.red = clamp(color.red + (color.red * parcentage / 100), 0, 255)
|
||||
color.green = clamp(color.green + (color.green * parcentage / 100), 0, 255)
|
||||
color.blue = clamp(color.blue + (color.blue * parcentage / 100), 0, 255)
|
||||
return rgb_num2str(color)
|
||||
end
|
||||
|
||||
-- Changes contrast of rgb_color by amount
|
||||
local function contrast_modifier(rgb_color, amount)
|
||||
local color = rgb_str2num(rgb_color)
|
||||
color.red = clamp(color.red + amount, 0, 255)
|
||||
color.green = clamp(color.green + amount, 0, 255)
|
||||
color.blue = clamp(color.blue + amount, 0, 255)
|
||||
return rgb_num2str(color)
|
||||
end
|
||||
|
||||
-- Changes brightness of foreground color to achieve contrast
|
||||
-- without changing the color
|
||||
local function apply_contrast(highlight)
|
||||
local hightlight_bg_avg = get_color_avg(highlight.bg)
|
||||
local contrast_threshold_config = clamp(contrast_threshold, 0, 0.5)
|
||||
local contranst_change_step = 5
|
||||
if hightlight_bg_avg > 0.5 then
|
||||
contranst_change_step = -contranst_change_step
|
||||
end
|
||||
|
||||
-- Don't waste too much time here max 25 iteration should be more than enough
|
||||
local iteration_count = 1
|
||||
while math.abs(get_color_avg(highlight.fg) - hightlight_bg_avg) < contrast_threshold_config and iteration_count < 25 do
|
||||
highlight.fg = contrast_modifier(highlight.fg, contranst_change_step)
|
||||
iteration_count = iteration_count + 1
|
||||
end
|
||||
end
|
||||
|
||||
-- Get the colors to create theme
|
||||
-- stylua: ignore
|
||||
local colors = {
|
||||
normal = utils.extract_color_from_hllist('bg', { 'PmenuSel', 'PmenuThumb', 'TabLineSel' }, '#000000'),
|
||||
insert = utils.extract_color_from_hllist('fg', { 'String', 'MoreMsg' }, '#000000'),
|
||||
replace = utils.extract_color_from_hllist('fg', { 'Number', 'Type' }, '#000000'),
|
||||
visual = utils.extract_color_from_hllist('fg', { 'Special', 'Boolean', 'Constant' }, '#000000'),
|
||||
command = utils.extract_color_from_hllist('fg', { 'Identifier' }, '#000000'),
|
||||
back1 = utils.extract_color_from_hllist('bg', { 'Normal', 'StatusLineNC' }, '#000000'),
|
||||
fore = utils.extract_color_from_hllist('fg', { 'Normal', 'StatusLine' }, '#000000'),
|
||||
back2 = utils.extract_color_from_hllist('bg', { 'StatusLine' }, '#000000'),
|
||||
}
|
||||
|
||||
-- Change brightness of colors
|
||||
-- Darken if light theme (or) Lighten if dark theme
|
||||
local normal_color = utils.extract_highlight_colors("Normal", "bg")
|
||||
if normal_color ~= nil then
|
||||
if get_color_brightness(normal_color) > 0.5 then
|
||||
brightness_modifier_parameter = -brightness_modifier_parameter
|
||||
end
|
||||
for name, color in pairs(colors) do
|
||||
colors[name] = brightness_modifier(color, brightness_modifier_parameter)
|
||||
end
|
||||
end
|
||||
|
||||
-- Basic theme definition
|
||||
local M = {
|
||||
normal = {
|
||||
a = { bg = colors.normal, fg = colors.back1, gui = "bold" },
|
||||
b = { bg = custom.B, fg = colors.normal },
|
||||
c = { bg = custom.A, fg = colors.fore },
|
||||
},
|
||||
insert = {
|
||||
a = { bg = colors.insert, fg = colors.back1, gui = "bold" },
|
||||
b = { bg = custom.B, fg = colors.insert },
|
||||
c = { bg = colors.back2, fg = colors.fore },
|
||||
},
|
||||
replace = {
|
||||
a = { bg = colors.replace, fg = colors.back1, gui = "bold" },
|
||||
b = { bg = custom.B, fg = colors.replace },
|
||||
c = { bg = colors.back2, fg = colors.fore },
|
||||
},
|
||||
visual = {
|
||||
a = { bg = colors.visual, fg = colors.back1, gui = "bold" },
|
||||
b = { bg = custom.B, fg = colors.visual },
|
||||
c = { bg = colors.back2, fg = colors.fore },
|
||||
},
|
||||
command = {
|
||||
a = { bg = colors.command, fg = colors.back1, gui = "bold" },
|
||||
b = { bg = custom.B, fg = colors.command },
|
||||
c = { bg = colors.back2, fg = colors.fore },
|
||||
},
|
||||
}
|
||||
|
||||
M.terminal = M.command
|
||||
M.inactive = M.normal
|
||||
|
||||
-- Apply proper contrast so text is readable
|
||||
for _, section in pairs(M) do
|
||||
for _, highlight in pairs(section) do
|
||||
apply_contrast(highlight)
|
||||
end
|
||||
end
|
||||
|
||||
return M
|
||||
42
home/neovim/nvim/lua/lualine/themes/transparent.lua
Normal file
42
home/neovim/nvim/lua/lualine/themes/transparent.lua
Normal file
@@ -0,0 +1,42 @@
|
||||
local colors = {
|
||||
white = "#ffffff",
|
||||
blue = "#88A1BB",
|
||||
green = "#b7d670",
|
||||
magenta = "#a889d2",
|
||||
orange = "#fd9f4d",
|
||||
yellow = "#f3fa9b",
|
||||
transparent = "None",
|
||||
}
|
||||
|
||||
return {
|
||||
normal = {
|
||||
a = { bg = colors.transparent, fg = colors.blue, gui = "bold" },
|
||||
b = { bg = colors.transparent, fg = colors.white },
|
||||
c = { bg = colors.transparent, fg = colors.white },
|
||||
},
|
||||
insert = {
|
||||
a = { bg = colors.transparent, fg = colors.green, gui = "bold" },
|
||||
b = { bg = colors.transparent, fg = colors.white },
|
||||
c = { bg = colors.transparent, fg = colors.white },
|
||||
},
|
||||
visual = {
|
||||
a = { bg = colors.transparent, fg = colors.magenta, gui = "bold" },
|
||||
b = { bg = colors.transparent, fg = colors.white },
|
||||
c = { bg = colors.transparent, fg = colors.white },
|
||||
},
|
||||
replace = {
|
||||
a = { bg = colors.transparent, fg = colors.orange, gui = "bold" },
|
||||
b = { bg = colors.transparent, fg = colors.white },
|
||||
c = { bg = colors.transparent, fg = colors.white },
|
||||
},
|
||||
command = {
|
||||
a = { bg = colors.transparent, fg = colors.yellow, gui = "bold" },
|
||||
b = { bg = colors.transparent, fg = colors.white },
|
||||
c = { bg = colors.transparent, fg = colors.white },
|
||||
},
|
||||
inactive = {
|
||||
a = { bg = colors.transparent, fg = colors.white, gui = "bold" },
|
||||
b = { bg = colors.transparent, fg = colors.white },
|
||||
c = { bg = colors.transparent, fg = colors.white },
|
||||
},
|
||||
}
|
||||
9
home/neovim/nvim/lua/plugins/abolish.lua
Normal file
9
home/neovim/nvim/lua/plugins/abolish.lua
Normal file
@@ -0,0 +1,9 @@
|
||||
-- Automatically fix spelling mistakes
|
||||
-- https://github.com/tpope/vim-abolish
|
||||
return {
|
||||
"tpope/vim-abolish",
|
||||
config = function()
|
||||
vim.api.nvim_command("Abolish teh the")
|
||||
vim.api.nvim_command("Abolish {despa,sepe}rat{e,es,ed,ing,ely,ion,ions,or} {despe,sepa}rat{}")
|
||||
end,
|
||||
}
|
||||
6
home/neovim/nvim/lua/plugins/activitywatch.lua
Normal file
6
home/neovim/nvim/lua/plugins/activitywatch.lua
Normal file
@@ -0,0 +1,6 @@
|
||||
-- ActivityWatch
|
||||
-- https://github.com/ActivityWatch/aw-watcher-vim
|
||||
return {
|
||||
"ActivityWatch/aw-watcher-vim",
|
||||
event = "VeryLazy",
|
||||
}
|
||||
22
home/neovim/nvim/lua/plugins/aerial.lua
Normal file
22
home/neovim/nvim/lua/plugins/aerial.lua
Normal file
@@ -0,0 +1,22 @@
|
||||
-- aerical.nvim
|
||||
-- https://github.com/stevearc/aerial.nvim
|
||||
return {
|
||||
"stevearc/aerial.nvim",
|
||||
event = "VeryLazy",
|
||||
dependencies = {
|
||||
"nvim-treesitter/nvim-treesitter",
|
||||
"nvim-tree/nvim-web-devicons",
|
||||
},
|
||||
config = function()
|
||||
require("aerial").setup({
|
||||
on_attach = function(bufnr)
|
||||
-- Jump forwards/backwards with '{' and '}'
|
||||
vim.keymap.set("n", "{", "<cmd>AerialPrev<CR>", { buffer = bufnr })
|
||||
vim.keymap.set("n", "}", "<cmd>AerialNext<CR>", { buffer = bufnr })
|
||||
end,
|
||||
})
|
||||
end,
|
||||
keys = {
|
||||
{ "<leader>A", "<cmd>AerialToggle!<CR>", desc = "Aerial" },
|
||||
},
|
||||
}
|
||||
8
home/neovim/nvim/lua/plugins/astro.lua
Normal file
8
home/neovim/nvim/lua/plugins/astro.lua
Normal file
@@ -0,0 +1,8 @@
|
||||
-- Astro support
|
||||
-- https://github.com/wuelnerdotexe/vim-astro
|
||||
return {
|
||||
"wuelnerdotexe/vim-astro",
|
||||
config = function()
|
||||
vim.g.astro_typescript = "enable"
|
||||
end,
|
||||
}
|
||||
8
home/neovim/nvim/lua/plugins/auto-save.lua
Normal file
8
home/neovim/nvim/lua/plugins/auto-save.lua
Normal file
@@ -0,0 +1,8 @@
|
||||
-- 🧶 Automatically save your changes in NeoVim
|
||||
-- https://github.com/pocco81/auto-save.nvim
|
||||
return {
|
||||
"Pocco81/auto-save.nvim",
|
||||
keys = {
|
||||
{ "<leader>as", "<Cmd>ASToggle<CR>", desc = "Autosave Toggle" },
|
||||
},
|
||||
}
|
||||
10
home/neovim/nvim/lua/plugins/autotag.lua
Normal file
10
home/neovim/nvim/lua/plugins/autotag.lua
Normal file
@@ -0,0 +1,10 @@
|
||||
-- Use treesitter to auto close and auto rename HTML tags
|
||||
-- https://github.com/windwp/nvim-ts-autotag
|
||||
return {
|
||||
"windwp/nvim-ts-autotag",
|
||||
config = function()
|
||||
require("nvim-ts-autotag").setup({
|
||||
disable_filetype = { "TelescopePrompt", "vim" },
|
||||
})
|
||||
end,
|
||||
}
|
||||
15
home/neovim/nvim/lua/plugins/barbecue.lua
Normal file
15
home/neovim/nvim/lua/plugins/barbecue.lua
Normal file
@@ -0,0 +1,15 @@
|
||||
-- barbecue.nvim
|
||||
-- https://github.com/utilyre/barbecue.nvim
|
||||
return {
|
||||
"utilyre/barbecue.nvim",
|
||||
name = "barbecue",
|
||||
version = "*",
|
||||
dependencies = {
|
||||
"SmiteshP/nvim-navic",
|
||||
"nvim-tree/nvim-web-devicons",
|
||||
},
|
||||
config = function()
|
||||
require("barbecue").setup()
|
||||
require("barbecue.ui").toggle(true)
|
||||
end,
|
||||
}
|
||||
4
home/neovim/nvim/lua/plugins/base16.lua
Normal file
4
home/neovim/nvim/lua/plugins/base16.lua
Normal file
@@ -0,0 +1,4 @@
|
||||
-- https://github.com/chriskempson/base16-vim
|
||||
return {
|
||||
"chriskempson/base16-vim",
|
||||
}
|
||||
14
home/neovim/nvim/lua/plugins/blamer.lua
Normal file
14
home/neovim/nvim/lua/plugins/blamer.lua
Normal file
@@ -0,0 +1,14 @@
|
||||
-- Show Git blame inline
|
||||
-- https://github.com/APZelos/blamer.nvim
|
||||
return {
|
||||
"APZelos/blamer.nvim",
|
||||
keys = {
|
||||
-- stylua: ignore
|
||||
{ "<leader>gB", "<cmd>BlamerToggle<cr>", desc = "Git Blame" },
|
||||
},
|
||||
config = function()
|
||||
vim.g.blamer_enabled = 0
|
||||
vim.g.blamer_relative_time = 1
|
||||
vim.g.blamer_delay = 200
|
||||
end,
|
||||
}
|
||||
5
home/neovim/nvim/lua/plugins/bookmark.lua
Normal file
5
home/neovim/nvim/lua/plugins/bookmark.lua
Normal file
@@ -0,0 +1,5 @@
|
||||
-- Vim bookmark plugin
|
||||
-- https://github.com/MattesGroeger/vim-bookmarks
|
||||
return {
|
||||
"MattesGroeger/vim-bookmarks",
|
||||
}
|
||||
17
home/neovim/nvim/lua/plugins/bufferline.lua
Normal file
17
home/neovim/nvim/lua/plugins/bufferline.lua
Normal file
@@ -0,0 +1,17 @@
|
||||
-- A snazzy bufferline for Neovim
|
||||
-- https://github.com/akinsho/bufferline.nvim
|
||||
return {
|
||||
"akinsho/bufferline.nvim",
|
||||
dependencies = "nvim-tree/nvim-web-devicons",
|
||||
keys = {
|
||||
{ "<Tab>", "<Cmd>BufferLineCycleNext<CR>", desc = "Next tab" },
|
||||
{ "<S-Tab>", "<Cmd>BufferLineCyclePrev<CR>", desc = "Prev tab" },
|
||||
},
|
||||
opts = {
|
||||
options = {
|
||||
mode = "tabs",
|
||||
show_buffer_close_icons = false,
|
||||
show_close_icon = false,
|
||||
},
|
||||
},
|
||||
}
|
||||
7
home/neovim/nvim/lua/plugins/catppuccin.lua
Normal file
7
home/neovim/nvim/lua/plugins/catppuccin.lua
Normal file
@@ -0,0 +1,7 @@
|
||||
-- https://github.com/catppuccin/nvim
|
||||
return {
|
||||
{
|
||||
"catppuccin/nvim",
|
||||
name = "catppuccin",
|
||||
},
|
||||
}
|
||||
20
home/neovim/nvim/lua/plugins/chafa.lua
Normal file
20
home/neovim/nvim/lua/plugins/chafa.lua
Normal file
@@ -0,0 +1,20 @@
|
||||
-- View images in Neovim
|
||||
-- https://github.com/princejoogie/chafa.nvim
|
||||
return {
|
||||
"princejoogie/chafa.nvim",
|
||||
dependencies = {
|
||||
"nvim-lua/plenary.nvim",
|
||||
"m00qek/baleia.nvim",
|
||||
},
|
||||
config = function()
|
||||
require("chafa").setup({
|
||||
render = {
|
||||
min_padding = 5,
|
||||
show_label = true,
|
||||
},
|
||||
events = {
|
||||
update_on_nvim_resize = true,
|
||||
},
|
||||
})
|
||||
end,
|
||||
}
|
||||
29
home/neovim/nvim/lua/plugins/chatgpg.lua
Normal file
29
home/neovim/nvim/lua/plugins/chatgpg.lua
Normal file
@@ -0,0 +1,29 @@
|
||||
-- ChatGPT Neovim Plugin
|
||||
-- https://github.com/jackMort/ChatGPT.nvim
|
||||
return {
|
||||
"jackMort/ChatGPT.nvim",
|
||||
event = "VeryLazy",
|
||||
keys = {
|
||||
{
|
||||
mode = "v",
|
||||
"<leader>e",
|
||||
function()
|
||||
require("chatgpt").edit_with_instructions()
|
||||
end,
|
||||
desc = "Edit with instructions",
|
||||
},
|
||||
},
|
||||
config = function()
|
||||
local home = vim.fn.expand("$HOME")
|
||||
local file_path = home .. "/.dotfiles/home/neovim/nvim/lua/plugins/chatgpg.txt.gpg"
|
||||
require("chatgpt").setup({
|
||||
api_key_cmd = "gpg --decrypt --use-agent " .. file_path,
|
||||
})
|
||||
end,
|
||||
dependencies = {
|
||||
"MunifTanjim/nui.nvim",
|
||||
"nvim-lua/plenary.nvim",
|
||||
"folke/trouble.nvim",
|
||||
"nvim-telescope/telescope.nvim",
|
||||
},
|
||||
}
|
||||
BIN
home/neovim/nvim/lua/plugins/chatgpg.txt.gpg
Normal file
BIN
home/neovim/nvim/lua/plugins/chatgpg.txt.gpg
Normal file
Binary file not shown.
16
home/neovim/nvim/lua/plugins/cheatsheet.lua
Normal file
16
home/neovim/nvim/lua/plugins/cheatsheet.lua
Normal file
@@ -0,0 +1,16 @@
|
||||
-- Searchable Cheatsheet
|
||||
-- https://github.com/sudormrfbin/cheatsheet.nvim
|
||||
return {
|
||||
"sudormrfbin/cheatsheet.nvim",
|
||||
dependencies = {
|
||||
"nvim-telescope/telescope.nvim",
|
||||
"nvim-lua/popup.nvim",
|
||||
"nvim-lua/plenary.nvim",
|
||||
},
|
||||
keys = {
|
||||
{ "<leader>C", "<cmd>Cheatsheet<cr>", desc = "Cheatsheet" },
|
||||
},
|
||||
config = function()
|
||||
require("cheatsheet").setup()
|
||||
end,
|
||||
}
|
||||
47
home/neovim/nvim/lua/plugins/cmp.lua
Normal file
47
home/neovim/nvim/lua/plugins/cmp.lua
Normal file
@@ -0,0 +1,47 @@
|
||||
return {
|
||||
"hrsh7th/nvim-cmp",
|
||||
dependencies = {
|
||||
{ "roobert/tailwindcss-colorizer-cmp.nvim", config = true },
|
||||
"zbirenbaum/copilot-cmp",
|
||||
"David-Kunz/cmp-npm",
|
||||
},
|
||||
opts = function(_, opts)
|
||||
local cmp = require("cmp")
|
||||
opts.sources = cmp.config.sources(vim.list_extend(opts.sources, {
|
||||
{ name = "copilot" },
|
||||
{ name = "npm", keyword_length = 4 },
|
||||
}))
|
||||
|
||||
opts.formatting = {
|
||||
fields = { "kind", "abbr", "menu" },
|
||||
format = function(_, item)
|
||||
local icons = require("lazyvim.config").icons.kinds
|
||||
if icons[item.kind] then
|
||||
item.kind = icons[item.kind]
|
||||
end
|
||||
return item
|
||||
end,
|
||||
}
|
||||
|
||||
opts.window = {
|
||||
completion = cmp.config.window.bordered(),
|
||||
documentation = cmp.config.window.bordered(),
|
||||
}
|
||||
|
||||
vim.api.nvim_set_hl(0, "CmpItemKindCopilot", { fg = "#6CC644" })
|
||||
vim.api.nvim_set_hl(0, "CmpItemAbbrMatch", { fg = "NONE", bg = "#000000" })
|
||||
|
||||
vim.cmd([[highlight! link CmpItemAbbrMatchFuzzy CmpItemAbbrMatch]])
|
||||
vim.cmd([[highlight! CmpItemAbbrDeprecated guibg=NONE gui=strikethrough guifg=#808080]])
|
||||
vim.cmd([[highlight! CmpItemAbbrMatch guibg=NONE guifg=#569CD6]])
|
||||
vim.cmd([[highlight! link CmpItemAbbrMatchFuzzy CmpItemAbbrMatch]])
|
||||
vim.cmd([[highlight! CmpItemKindVariable guibg=NONE guifg=#9CDCFE]])
|
||||
vim.cmd([[highlight! link CmpItemKindInterface CmpItemKindVariable]])
|
||||
vim.cmd([[highlight! link CmpItemKindText CmpItemKindVariable]])
|
||||
vim.cmd([[highlight! CmpItemKindFunction guibg=NONE guifg=#C586C0]])
|
||||
vim.cmd([[highlight! link CmpItemKindMethod CmpItemKindFunction]])
|
||||
vim.cmd([[highlight! CmpItemKindKeyword guibg=NONE guifg=#D4D4D4]])
|
||||
vim.cmd([[highlight! link CmpItemKindProperty CmpItemKindKeyword]])
|
||||
vim.cmd([[highlight! link CmpItemKindUnit CmpItemKindKeyword]])
|
||||
end,
|
||||
}
|
||||
12
home/neovim/nvim/lua/plugins/codewindow.lua
Normal file
12
home/neovim/nvim/lua/plugins/codewindow.lua
Normal file
@@ -0,0 +1,12 @@
|
||||
-- Minimap
|
||||
-- https://github.com/gorbit99/codewindow.nvim
|
||||
return {
|
||||
"gorbit99/codewindow.nvim",
|
||||
config = function()
|
||||
local codewindow = require("codewindow")
|
||||
codewindow.setup({
|
||||
window_border = "none",
|
||||
})
|
||||
codewindow.apply_default_keybinds()
|
||||
end,
|
||||
}
|
||||
29
home/neovim/nvim/lua/plugins/colorizer.lua
Normal file
29
home/neovim/nvim/lua/plugins/colorizer.lua
Normal file
@@ -0,0 +1,29 @@
|
||||
-- The fastest Neovim colorizer
|
||||
-- https://github.com/NvChad/nvim-colorizer.lua
|
||||
return {
|
||||
"NvChad/nvim-colorizer.lua",
|
||||
opts = {
|
||||
filetypes = {
|
||||
"css",
|
||||
"html",
|
||||
"javascript",
|
||||
"javascriptreact",
|
||||
"typescript",
|
||||
"typescriptreact",
|
||||
"yaml",
|
||||
"conf",
|
||||
"lua",
|
||||
},
|
||||
user_default_options = {
|
||||
RGB = true,
|
||||
RRGGBB = true,
|
||||
names = true,
|
||||
RRGGBBAA = true,
|
||||
rgb_fn = true,
|
||||
hsl_fn = true,
|
||||
css = true,
|
||||
css_fn = true,
|
||||
mode = "background",
|
||||
},
|
||||
},
|
||||
}
|
||||
7
home/neovim/nvim/lua/plugins/colorscheme-catppuccin.lua
Normal file
7
home/neovim/nvim/lua/plugins/colorscheme-catppuccin.lua
Normal file
@@ -0,0 +1,7 @@
|
||||
-- https://github.com/catppuccin/nvim
|
||||
return {
|
||||
"catppuccin/nvim",
|
||||
lazy = false,
|
||||
priority = 1000,
|
||||
name = "catppuccin",
|
||||
}
|
||||
10
home/neovim/nvim/lua/plugins/colorscheme-night-owl.lua
Normal file
10
home/neovim/nvim/lua/plugins/colorscheme-night-owl.lua
Normal file
@@ -0,0 +1,10 @@
|
||||
-- 🦉 🌌 Night Owl colorscheme implementation for Neovim with support for Treesitter and semantic tokens
|
||||
-- https://github.com/oxfist/night-owl.nvim
|
||||
return {
|
||||
"oxfist/night-owl.nvim",
|
||||
lazy = true,
|
||||
config = function()
|
||||
require("night-owl").setup()
|
||||
vim.cmd.colorscheme("night-owl")
|
||||
end,
|
||||
}
|
||||
6
home/neovim/nvim/lua/plugins/colorscheme-tokyonight.lua
Normal file
6
home/neovim/nvim/lua/plugins/colorscheme-tokyonight.lua
Normal file
@@ -0,0 +1,6 @@
|
||||
-- https://github.com/folke/tokyonight.nvim
|
||||
return {
|
||||
"folke/tokyonight.nvim",
|
||||
lazy = true,
|
||||
opts = { style = "night" },
|
||||
}
|
||||
9
home/neovim/nvim/lua/plugins/colorschemes.lua
Normal file
9
home/neovim/nvim/lua/plugins/colorschemes.lua
Normal file
@@ -0,0 +1,9 @@
|
||||
-- Configure LazyVim to load colorscheme
|
||||
return {
|
||||
{
|
||||
"LazyVim/LazyVim",
|
||||
opts = {
|
||||
colorscheme = "catppuccin",
|
||||
},
|
||||
},
|
||||
}
|
||||
5
home/neovim/nvim/lua/plugins/committia.lua
Normal file
5
home/neovim/nvim/lua/plugins/committia.lua
Normal file
@@ -0,0 +1,5 @@
|
||||
-- More pleasant editing on commit messages
|
||||
-- https://github.com/rhysd/committia.vim
|
||||
return {
|
||||
"rhysd/committia.vim",
|
||||
}
|
||||
13
home/neovim/nvim/lua/plugins/copilot-chat.lua
Normal file
13
home/neovim/nvim/lua/plugins/copilot-chat.lua
Normal file
@@ -0,0 +1,13 @@
|
||||
-- Chat with GitHub Copilot in Neovim
|
||||
-- https://github.com/CopilotC-Nvim/CopilotChat.nvim
|
||||
return {
|
||||
{
|
||||
"CopilotC-Nvim/CopilotChat.nvim",
|
||||
branch = "canary",
|
||||
dependencies = {
|
||||
{ "zbirenbaum/copilot.lua" }, -- or github/copilot.vim
|
||||
{ "nvim-lua/plenary.nvim" }, -- for curl, log wrapper
|
||||
},
|
||||
opts = {},
|
||||
},
|
||||
}
|
||||
10
home/neovim/nvim/lua/plugins/copilot.lua
Normal file
10
home/neovim/nvim/lua/plugins/copilot.lua
Normal file
@@ -0,0 +1,10 @@
|
||||
-- Copilot replacement
|
||||
-- https://github.com/zbirenbaum/copilot.lua
|
||||
-- https://github.com/zbirenbaum/copilot-cmp
|
||||
return {
|
||||
"zbirenbaum/copilot-cmp",
|
||||
dependencies = "zbirenbaum/copilot.lua",
|
||||
opts = function()
|
||||
require("copilot").setup()
|
||||
end,
|
||||
}
|
||||
19
home/neovim/nvim/lua/plugins/cursorline.lua
Normal file
19
home/neovim/nvim/lua/plugins/cursorline.lua
Normal file
@@ -0,0 +1,19 @@
|
||||
-- Highlight cursor words and lines
|
||||
-- https://github.com/yamatsum/nvim-cursorline
|
||||
return {
|
||||
"yamatsum/nvim-cursorline",
|
||||
config = function()
|
||||
require("nvim-cursorline").setup({
|
||||
cursorline = {
|
||||
enable = false,
|
||||
timeout = 1000,
|
||||
number = false,
|
||||
},
|
||||
cursorword = {
|
||||
enable = true,
|
||||
min_length = 3,
|
||||
hl = { underline = true },
|
||||
},
|
||||
})
|
||||
end,
|
||||
}
|
||||
110
home/neovim/nvim/lua/plugins/dashboard.lua
Normal file
110
home/neovim/nvim/lua/plugins/dashboard.lua
Normal file
@@ -0,0 +1,110 @@
|
||||
return {
|
||||
"nvimdev/dashboard-nvim",
|
||||
event = "VimEnter",
|
||||
opts = function()
|
||||
local logo = "\n"
|
||||
.. " ▖\n"
|
||||
.. "┌─╮╭─╮╭─╮▖ ▖▖▄▄▗▄ \n"
|
||||
.. "│ │├─┘│ │▝▖▞ ▌▌ ▌ ▌\n"
|
||||
.. "╵ ╵╰─╯╰─╯ ▝ ▘▘ ▘ ▘\n"
|
||||
.. "\n"
|
||||
|
||||
logo = string.rep("\n", 5) .. logo .. "\n\n"
|
||||
|
||||
local opts = {
|
||||
theme = "doom",
|
||||
hide = {
|
||||
statusline = false,
|
||||
},
|
||||
config = {
|
||||
header = vim.split(logo, "\n"),
|
||||
center = {
|
||||
{
|
||||
action = "Telescope find_files",
|
||||
desc = " Find file",
|
||||
icon = " ",
|
||||
key = "f",
|
||||
},
|
||||
{
|
||||
action = "ene | startinsert",
|
||||
desc = " New file",
|
||||
icon = " ",
|
||||
key = "n",
|
||||
},
|
||||
{
|
||||
action = "Telescope oldfiles",
|
||||
desc = " Recent files",
|
||||
icon = " ",
|
||||
key = "r",
|
||||
},
|
||||
{
|
||||
action = "Telescope live_grep",
|
||||
desc = " Find text",
|
||||
icon = " ",
|
||||
key = "g",
|
||||
},
|
||||
{
|
||||
action = "Telescope projects",
|
||||
desc = " Find project",
|
||||
icon = " ",
|
||||
key = "p",
|
||||
},
|
||||
{
|
||||
action = 'lua require("persistence").load()',
|
||||
desc = " Restore Session",
|
||||
icon = " ",
|
||||
key = "s",
|
||||
},
|
||||
{
|
||||
action = "LazyExtras",
|
||||
desc = " Lazy Extras",
|
||||
icon = " ",
|
||||
key = "e",
|
||||
},
|
||||
{
|
||||
action = "Lazy",
|
||||
desc = " Lazy",
|
||||
icon = " ",
|
||||
key = "l",
|
||||
},
|
||||
{
|
||||
action = "Mason",
|
||||
desc = " Mason",
|
||||
icon = " ",
|
||||
key = "m",
|
||||
},
|
||||
{
|
||||
action = "qa",
|
||||
desc = " Quit",
|
||||
icon = " ",
|
||||
key = "q",
|
||||
},
|
||||
},
|
||||
footer = function()
|
||||
local stats = require("lazy").stats()
|
||||
local ms = (math.floor(stats.startuptime * 100 + 0.5) / 100)
|
||||
return {
|
||||
"⚡ Neovim loaded " .. stats.loaded .. "/" .. stats.count .. " plugins in " .. ms .. "ms",
|
||||
}
|
||||
end,
|
||||
},
|
||||
}
|
||||
|
||||
for _, button in ipairs(opts.config.center) do
|
||||
button.desc = button.desc .. string.rep(" ", 43 - #button.desc)
|
||||
end
|
||||
|
||||
-- close Lazy and re-open when the dashboard is ready
|
||||
if vim.o.filetype == "lazy" then
|
||||
vim.cmd.close()
|
||||
vim.api.nvim_create_autocmd("User", {
|
||||
pattern = "DashboardLoaded",
|
||||
callback = function()
|
||||
require("lazy").show()
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
return opts
|
||||
end,
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user