diff --git a/flake.lock b/flake.lock index 6a4f23f..41c6966 100644 --- a/flake.lock +++ b/flake.lock @@ -21,7 +21,42 @@ "type": "github" } }, + "dumpasm": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" + }, + "locked": { + "lastModified": 1732916787, + "narHash": "sha256-CIidjQcQNvwuxMOGc6WKVTXO4MWTOp+Rr5HN2ZCRR58=", + "owner": "jdonszelmann", + "repo": "dumpasm", + "rev": "8f2bb630aa90bddf3ada83e5a57eba6aa42a06f5", + "type": "github" + }, + "original": { + "owner": "jdonszelmann", + "repo": "dumpasm", + "type": "github" + } + }, "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_2": { "locked": { "lastModified": 1696426674, "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", @@ -43,11 +78,11 @@ ] }, "locked": { - "lastModified": 1730504689, - "narHash": "sha256-hgmguH29K2fvs9szpq2r3pz2/8cJd2LPS+b4tfNFCwE=", + "lastModified": 1733312601, + "narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "506278e768c2a08bec68eb62932193e341f55c90", + "rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9", "type": "github" }, "original": { @@ -61,11 +96,11 @@ "systems": "systems" }, "locked": { - "lastModified": 1726560853, - "narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=", + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", "owner": "numtide", "repo": "flake-utils", - "rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", "type": "github" }, "original": { @@ -79,11 +114,11 @@ "systems": "systems_2" }, "locked": { - "lastModified": 1726560853, - "narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=", + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", "owner": "numtide", "repo": "flake-utils", - "rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", "type": "github" }, "original": { @@ -96,6 +131,60 @@ "inputs": { "systems": "systems_3" }, + "locked": { + "lastModified": 1705309234, + "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_4": { + "inputs": { + "systems": "systems_4" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_5": { + "inputs": { + "systems": "systems_5" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_6": { + "inputs": { + "systems": "systems_6" + }, "locked": { "lastModified": 1710146030, "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", @@ -110,6 +199,31 @@ "type": "github" } }, + "ghostty": { + "inputs": { + "flake-compat": "flake-compat", + "nixpkgs-stable": [ + "nixpkgs" + ], + "nixpkgs-unstable": [ + "nixpkgs" + ], + "zig": "zig" + }, + "locked": { + "lastModified": 1735271978, + "narHash": "sha256-y6Ony5eq4F4E76Y2ZhALSEzBZ4GbGRVQIEScPieCDGI=", + "owner": "ghostty-org", + "repo": "ghostty", + "rev": "a8e5eef11cc67f87f445626f9ca2993373774bf8", + "type": "github" + }, + "original": { + "owner": "ghostty-org", + "repo": "ghostty", + "type": "github" + } + }, "git-hooks": { "inputs": { "flake-compat": [ @@ -127,11 +241,11 @@ ] }, "locked": { - "lastModified": 1730814269, - "narHash": "sha256-fWPHyhYE6xvMI1eGY3pwBTq85wcy1YXqdzTZF+06nOg=", + "lastModified": 1733318908, + "narHash": "sha256-SVQVsbafSM1dJ4fpgyBqLZ+Lft+jcQuMtEL3lQWx2Sk=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "d70155fdc00df4628446352fc58adc640cd705c2", + "rev": "6f4e2a2112050951a314d2733a994fbab94864c6", "type": "github" }, "original": { @@ -169,11 +283,11 @@ ] }, "locked": { - "lastModified": 1730837930, - "narHash": "sha256-0kZL4m+bKBJUBQse0HanewWO0g8hDdCvBhudzxgehqc=", + "lastModified": 1733873195, + "narHash": "sha256-dTosiZ3sZ/NKoLKQ++v8nZdEHya0eTNEsaizNp+MUPM=", "owner": "nix-community", "repo": "home-manager", - "rev": "2f607e07f3ac7e53541120536708e824acccfaa8", + "rev": "f26aa4b76fb7606127032d33ac73d7d507d82758", "type": "github" }, "original": { @@ -190,11 +304,11 @@ ] }, "locked": { - "lastModified": 1730837930, - "narHash": "sha256-0kZL4m+bKBJUBQse0HanewWO0g8hDdCvBhudzxgehqc=", + "lastModified": 1733484277, + "narHash": "sha256-i5ay20XsvpW91N4URET/nOc0VQWOAd4c4vbqYtcH8Rc=", "owner": "nix-community", "repo": "home-manager", - "rev": "2f607e07f3ac7e53541120536708e824acccfaa8", + "rev": "d00c6f6d0ad16d598bf7e2956f52c1d9d5de3c3a", "type": "github" }, "original": { @@ -231,6 +345,28 @@ "type": "github" } }, + "jujutsu": { + "inputs": { + "flake-utils": "flake-utils_4", + "nixpkgs": [ + "nixpkgs" + ], + "rust-overlay": "rust-overlay" + }, + "locked": { + "lastModified": 1733881065, + "narHash": "sha256-RBr3jfh8dtDKeYLmJYZvNj2U2jiA1AY1jx4GbQDNOU0=", + "owner": "martinvonz", + "repo": "jj", + "rev": "e1936a2e8bc22218e3a5729fed89b8cc5c5cbb83", + "type": "github" + }, + "original": { + "owner": "martinvonz", + "repo": "jj", + "type": "github" + } + }, "kitty-search": { "flake": false, "locked": { @@ -255,11 +391,11 @@ ] }, "locked": { - "lastModified": 1730779758, - "narHash": "sha256-5WI9AnsBwhLzVRnQm3Qn9oAbROnuLDQTpaXeyZCK8qw=", + "lastModified": 1733570843, + "narHash": "sha256-sQJAxY1TYWD1UyibN/FnN97paTFuwBw3Vp3DNCyKsMk=", "owner": "lnl7", "repo": "nix-darwin", - "rev": "0e3f3f017c14467085f15d42343a3aaaacd89bcb", + "rev": "a35b08d09efda83625bef267eb24347b446c80b8", "type": "github" }, "original": { @@ -270,11 +406,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1730785428, - "narHash": "sha256-Zwl8YgTVJTEum+L+0zVAWvXAGbWAuXHax3KzuejaDyo=", + "lastModified": 1732521221, + "narHash": "sha256-2ThgXBUXAE1oFsVATK1ZX9IjPcS4nKFOAjhPNKuiMn0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "4aa36568d413aca0ea84a1684d2d46f55dbabad7", + "rev": "4633a7c72337ea8fd23a4f2ba3972865e3ec685d", "type": "github" }, "original": { @@ -285,6 +421,22 @@ } }, "nixpkgs_2": { + "locked": { + "lastModified": 1733759999, + "narHash": "sha256-463SNPWmz46iLzJKRzO3Q2b0Aurff3U1n0nYItxq7jU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "a73246e2eef4c6ed172979932bc80e1404ba2d56", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { "locked": { "lastModified": 1710377395, "narHash": "sha256-KMubsUWtVr7L55pXMBibBDBdmk3xrjbBPduc0E8z28c=", @@ -301,7 +453,7 @@ "nixvim": { "inputs": { "devshell": "devshell", - "flake-compat": "flake-compat", + "flake-compat": "flake-compat_2", "flake-parts": "flake-parts", "git-hooks": "git-hooks", "home-manager": "home-manager_2", @@ -313,11 +465,11 @@ "treefmt-nix": "treefmt-nix" }, "locked": { - "lastModified": 1731009822, - "narHash": "sha256-VwGfFYHjizs7yQwh8JRlDUVkHLPc34jdqkQ2vyv6ddY=", + "lastModified": 1733847310, + "narHash": "sha256-VHzWuZYK/m5OFXzAczrjnI7vH6knj0sfLnziRVDqgFE=", "owner": "nix-community", "repo": "nixvim", - "rev": "aabbd60633947baba11db44df84f402edc241440", + "rev": "b752606681ded3f69e99ed568c7075b3578dce48", "type": "github" }, "original": { @@ -328,7 +480,7 @@ }, "nuschtosSearch": { "inputs": { - "flake-utils": "flake-utils_2", + "flake-utils": "flake-utils_5", "ixx": "ixx", "nixpkgs": [ "nixvim", @@ -336,11 +488,11 @@ ] }, "locked": { - "lastModified": 1730760712, - "narHash": "sha256-F4H98tjNgySlSLItuOqHYo9LF85rFoS/Vr0uOrq7BM4=", + "lastModified": 1733411491, + "narHash": "sha256-315rJ7O9cOllPDaFscnJhcMleORHbxon0Kq9LAKJ5p4=", "owner": "NuschtOS", "repo": "search", - "rev": "aa5214c81b904a19f7a54f7a8f288f7902586eee", + "rev": "68e9fad70d95d08156cf10a030bd39487bed8ffe", "type": "github" }, "original": { @@ -351,14 +503,38 @@ }, "root": { "inputs": { - "flake-utils": "flake-utils", + "dumpasm": "dumpasm", + "flake-utils": "flake-utils_2", + "ghostty": "ghostty", "home-manager": "home-manager", + "jujutsu": "jujutsu", "kitty-search": "kitty-search", - "nixpkgs": "nixpkgs", + "nixpkgs": "nixpkgs_2", "nixvim": "nixvim", "t": "t" } }, + "rust-overlay": { + "inputs": { + "nixpkgs": [ + "jujutsu", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1732242723, + "narHash": "sha256-NWI8csIK0ujFlFuEXKnoc+7hWoCiEtINK9r48LUUMeU=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "a229311fcb45b88a95fdfa5cecd8349c809a272a", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, "systems": { "locked": { "lastModified": 1681028828, @@ -404,10 +580,55 @@ "type": "github" } }, + "systems_4": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_5": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_6": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, "t": { "inputs": { - "flake-utils": "flake-utils_3", - "nixpkgs": "nixpkgs_2" + "flake-utils": "flake-utils_6", + "nixpkgs": "nixpkgs_3" }, "locked": { "lastModified": 1710410762, @@ -431,11 +652,11 @@ ] }, "locked": { - "lastModified": 1730321837, - "narHash": "sha256-vK+a09qq19QNu2MlLcvN4qcRctJbqWkX7ahgPZ/+maI=", + "lastModified": 1733440889, + "narHash": "sha256-qKL3vjO+IXFQ0nTinFDqNq/sbbnnS5bMI1y0xX215fU=", "owner": "numtide", "repo": "treefmt-nix", - "rev": "746901bb8dba96d154b66492a29f5db0693dbfcc", + "rev": "50862ba6a8a0255b87377b9d2d4565e96f29b410", "type": "github" }, "original": { @@ -443,6 +664,31 @@ "repo": "treefmt-nix", "type": "github" } + }, + "zig": { + "inputs": { + "flake-compat": [ + "ghostty" + ], + "flake-utils": "flake-utils_3", + "nixpkgs": [ + "ghostty", + "nixpkgs-stable" + ] + }, + "locked": { + "lastModified": 1717848532, + "narHash": "sha256-d+xIUvSTreHl8pAmU1fnmkfDTGQYCn2Rb/zOwByxS2M=", + "owner": "mitchellh", + "repo": "zig-overlay", + "rev": "02fc5cc555fc14fda40c42d7c3250efa43812b43", + "type": "github" + }, + "original": { + "owner": "mitchellh", + "repo": "zig-overlay", + "type": "github" + } } }, "root": "root", diff --git a/flake.nix b/flake.nix index 6afe6aa..0ec22db 100644 --- a/flake.nix +++ b/flake.nix @@ -13,55 +13,92 @@ }; t.url = "github:jdonszelmann/t-rs"; + dumpasm.url = "github:jdonszelmann/dumpasm"; kitty-search = { url = "github:trygveaa/kitty-kitten-search"; flake = false; }; + + jujutsu = { + url = "github:martinvonz/jj"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + ghostty = { + url = "github:ghostty-org/ghostty"; + + inputs.nixpkgs-stable.follows = "nixpkgs"; + inputs.nixpkgs-unstable.follows = "nixpkgs"; + }; + }; - outputs = { home-manager, nixpkgs, flake-utils, nixvim, t, ... }@inputs: + outputs = + { + home-manager, + nixpkgs, + flake-utils, + nixvim, + t, + dumpasm, + jujutsu, + ghostty, + ... + }@inputs: let homeManagerModules = [ nixvim.homeManagerModules.nixvim ]; - pkgsForSystem = system: + pkgsForSystem = + system: import nixpkgs { inherit system; config.allowUnfree = true; overlays = [ - (_: _: { custom = { t = t.packages.${system}.default; }; }) + (_: _: { + custom = { + t = t.packages.${system}.default; + inherit (dumpasm.packages.${system}) dumpasm; + inherit (jujutsu.packages.${system}) jujutsu; + inherit (ghostty.packages.${system}) ghostty; + }; + }) ]; }; - mkHomeConfiguration = root: args: - home-manager.lib.homeManagerConfiguration ({ - modules = [ root ] ++ homeManagerModules ++ (args.modules or [ ]); - pkgs = pkgsForSystem (args.system or "x86_64-linux"); - } // { - inherit (args) extraSpecialArgs; - }); + mkHomeConfiguration = + root: args: + home-manager.lib.homeManagerConfiguration ( + { + modules = [ root ] ++ homeManagerModules ++ (args.modules or [ ]); + pkgs = pkgsForSystem (args.system or "x86_64-linux"); + } + // { + inherit (args) extraSpecialArgs; + } + ); in - flake-utils.lib.eachDefaultSystem - (system: rec { - formatter = legacyPackages.nixfmt-classic; - legacyPackages = pkgsForSystem system; - pkgs = legacyPackages; - devShells.default = pkgs.mkShell { - buildInputs = with pkgs; [ - (pkgs.writeShellScriptBin "fast-repl" '' - source /etc/set-environment - nix repl --file "${./.}/repl.nix" $@ - '') + flake-utils.lib.eachDefaultSystem (system: rec { + formatter = legacyPackages.nixfmt-classic; + legacyPackages = pkgsForSystem system; + pkgs = legacyPackages; + devShells.default = pkgs.mkShell { + buildInputs = with pkgs; [ + (pkgs.writeShellScriptBin "fast-repl" '' + source /etc/set-environment + nix repl --file "${./.}/repl.nix" $@ + '') - (pkgs.writeShellScriptBin "apply-home" '' - nix run .#home-manager -- switch --flake .#$@ - '') + (pkgs.writeShellScriptBin "apply-home" '' + nix run .#home-manager -- switch --flake .#$@ + '') - (pkgs.writeShellScriptBin "apply" '' - apply-home $(hostname -f) - '') - ]; - }; - }) // { + (pkgs.writeShellScriptBin "apply" '' + apply-home $(hostname -f) + '') + ]; + }; + }) + // { homeConfigurations = { kili = mkHomeConfiguration (import ./hosts/kili/home.nix) { diff --git a/hosts/icecube/home.nix b/hosts/icecube/home.nix index 8750b46..75b7749 100644 --- a/hosts/icecube/home.nix +++ b/hosts/icecube/home.nix @@ -1,18 +1,18 @@ { pkgs, ... }: { - home.stateVersion = "24.05"; - home.username = "jonathan"; - home.homeDirectory = "/home/jonathan"; + home = { + + stateVersion = "24.05"; + username = "jonathan"; + homeDirectory = "/home/jonathan"; + + sessionVariables.PATH = "$HOME/.nix-profile/bin:$PATH"; + }; imports = [ ../../programs/nvim - ../../programs/zsh + ../../programs/fish ../../programs/tmux ../../programs/git - ]; - - home.sessionVariables.PATH = "$HOME/.nix-profile/bin:$PATH"; - - home.packages = with pkgs; [ - atuin + ../../programs/jj ]; } diff --git a/hosts/kili/home.nix b/hosts/kili/home.nix index cc56a8d..cde9eb3 100644 --- a/hosts/kili/home.nix +++ b/hosts/kili/home.nix @@ -1,15 +1,19 @@ -{ pkgs, ... }: { - home.stateVersion = "24.05"; - home.username = "jonathan"; - home.homeDirectory = "/home/jonathan"; +{ config, pkgs, ... }: { + home = { + stateVersion = "24.05"; + username = "jonathan"; + homeDirectory = "/home/jonathan"; + packages = with pkgs; [config.programs.neovim.package]; + }; imports = [ ../../programs/nvim - ../../programs/zsh + ../../programs/fish ../../programs/kanata ../../programs/kitty ../../programs/tmux ../../programs/git + ../../programs/jj ]; # use the system-installed version of kitty on arch diff --git a/hosts/ori/home.nix b/hosts/ori/home.nix index 5062155..f75d02d 100644 --- a/hosts/ori/home.nix +++ b/hosts/ori/home.nix @@ -1,45 +1,47 @@ { pkgs, ... }: { - home.stateVersion = "24.05"; - home.username = "jonathan"; - home.homeDirectory = "/home/jonathan"; + home = { + stateVersion = "24.05"; + username = "jonathan"; + homeDirectory = "/home/jonathan"; + + packages = with pkgs; [ + element-desktop + discord-canary + comma + (python3.withPackages (pip: with pip; [ numpy matplotlib ])) + spotify + firefox + chromium + syncthing + nixfmt + xdg-utils + # to copy from the command line (my fish config has an alias `cb` to pipe things to the clipboard) + wl-clipboard-rs + prismlauncher + graphviz-nox + + inkscape + gimp + xournalpp + libreoffice + + dogdns + + jetbrains.rust-rover + + vlc + audacity + ]; + }; + imports = [ ../../programs/gnome ../../programs/nvim - ../../programs/zsh + ../../programs/fish ../../programs/git - ]; - - home.packages = with pkgs; [ - element-desktop - atuin - discord-canary - comma - (python3.withPackages (pip: with pip; [ numpy matplotlib ])) - spotify - firefox - chromium - syncthing - nixfmt - xdg-utils - # to copy from the command line (my zsh config has an alias `clip` to pipe things to the clipboard) - wl-clipboard-rs - prismlauncher - graphviz-nox - - inkscape - gimp - xournalpp - libreoffice - - dogdns - - jetbrains.rust-rover - - vlc - audacity + ../../programs/jj ]; programs.firefox = { enable = true; }; - services.syncthing = { enable = true; }; } diff --git a/programs/fish/default.nix b/programs/fish/default.nix new file mode 100644 index 0000000..fa12ef2 --- /dev/null +++ b/programs/fish/default.nix @@ -0,0 +1,211 @@ +{ + config, + pkgs, + lib, + ... +}: +with builtins; +with lib.attrsets; +let + scripts = (import ./scripts.nix) pkgs; + aliases = with scripts; { + "cp-mov" = cp-media "mov" "movies"; + "cp-ser" = cp-media "ser" "shows"; + "cp-ani" = cp-media "ani" "anime"; + "dumpasm" = "${pkgs.custom.dumpasm}/bin/dumpasm"; + "p" = calc; + "s" = "systemctl"; + "j" = "journalctl"; + "ju" = "journalctl -u"; + "jfu" = "journalctl -fu"; + "ls" = "${pkgs.eza}/bin/eza --git"; + "ll" = "${pkgs.eza}/bin/eza --git"; + "lt" = "${pkgs.eza}/bin/eza --long --tree -L 3"; + "open" = "${pkgs.xdg-utils}/bin/xdg-open"; + "cb" = "${pkgs.wl-clipboard-rs}/bin/wl-copy"; + "cat" = "${pkgs.bat}/bin/bat"; + + "pull" = "${pkgs.git}/bin/git pull"; + "push" = "${pkgs.git}/bin/git push"; + "commit" = "${pkgs.git}/bin/git commit"; + "add" = "${pkgs.git}/bin/git add"; + "patch" = "${pkgs.git}/bin/git add -p"; + "amend" = "${pkgs.git}/bin/git commit --amend"; + "log" = "${pkgs.git}/bin/git log --all --graph --decorate"; + "st" = "${pkgs.git}/bin/git status"; + "checkout" = "${pkgs.git}/bin/git checkout"; + "rebase" = "${pkgs.git}/bin/git rebase"; + "stash" = "${pkgs.git}/bin/git stash"; + + "f" = "nautilus --no-desktop . &"; + }; + # extracting any compressed format + extract = '' + function extract -a file -d "decompress a file" + if not test -f $file + echo "'$file' is not a valid file" + return 1 + end + switch $file + # tar can automatically figure out how to decompress + case '*.{tar,tar.{bz2,zst,gz,xz},tbz2,tgz'; ${pkgs.gnutar}/bin/tar xf $file; end + case '*.bz2'; bunzip2 $file; end + case '*.rar'; unrar e $file; end + case '*.gz'; gunzip $file; end + case '*.zip'; ${pkgs.unzip}/bin/unzip $file; end + case '*.Z'; uncompress $file; end + case '*.7z'; 7z x $file; end + case '*'; + echo "'$file' cannot be extracted" + return 1 + end + end + ''; +in +{ + programs = { + atuin = { + enable = true; + enableFishIntegration = true; + + settings = { + filter_mode_shell_up_key_binding = "directory"; + exit_mode = "return-original"; + + workspaces = true; + }; + }; + + zoxide = { + enable = true; + enableFishIntegration = true; + }; + + direnv = { + enable = true; + # enableFishIntegration = lib.mkDefault true; + }; + + fzf = { + enable = true; + enableFishIntegration = true; + }; + + fish = { + enable = true; + shellAliases = aliases; + plugins = with pkgs.fishPlugins; [ + { + name = "tide"; + inherit (tide) src; + } + { + name = "sponge"; + inherit (sponge) src; + } + { + name = "autopair"; + inherit (autopair) src; + } + ]; + + functions = { + fish_jj_prompt = { + body = '' + if not ${config.programs.jujutsu.package}/bin/jj root --quiet &>/dev/null + return 1 + end + + ${config.programs.jujutsu.package}/bin/jj log --ignore-working-copy --no-graph --color always -r @ -T ' + separate( + " ", + bookmarks.join(", "), + change_id.shortest(), + commit_id.shortest(), + if(conflict, "conflict"), + if(empty, "empty"), + if(divergent, "divergent"), + if(hidden, "hidden"), + ) + ' + ''; + }; + + _tide_item_jj = { + body = '' + set -l _tide_item_jj_color $_tide_location_color + echo -ns $_tide_item_jj_color" ("(fish_jj_prompt)$_tide_item_jj_color")" + ''; + }; + + _tide_item_git = { + body = '' + if not test -d .jj + fish_git_prompt '%s' + end + ''; + }; + }; + + interactiveShellInit = '' + fish_vi_key_bindings + + set -g sponge_successful_exit_codes 0 + set -g sponge_allow_previously_successful false + set -g sponge_delay 10 + + ${config.programs.jujutsu.package}/bin/jj util completion fish | source + + if set -q tide_left_prompt_items; and not contains "jj" $tide_left_prompt_items + set -l tide_item_jj_idx (contains -i "pwd" $tide_left_prompt_items) + if test $tide_item_jj_idx + set tide_left_prompt_items \ + $tide_left_prompt_items[1..$tide_item_jj_idx] \ + jj \ + $tide_left_prompt_items[(math $tide_item_jj_idx + 1)..-1] + end + end + + function t + cd "$(${pkgs.custom.t}/bin/t-rs $argv | tail -n 1)" + end + + function temp + t $argv + end + + function rs + cd "$(${pkgs.custom.t}/bin/t-rs $argv | tail -n 1)" + cargo init . --bin --name $(basename "$PWD") + vim src/main.rs + end + + fish_add_path "$HOME/.cargo/bin" + fish_add_path "$HOME/.local/bin" + fish_add_path "$HOME/Documents/scripts" + fish_add_path "$HOME/.nix-profile/bin" + ''; + }; + }; + + home.activation = { + setupTide = lib.hm.dag.entryAfter [ "writeBoundary" ] '' + setupTide() { + ${pkgs.fish}/bin/fish -c ${lib.escapeShellArg "tide configure ${ + lib.cli.toGNUCommandLineShell { } { + auto = true; + style = "Lean"; + prompt_colors = "True color"; + show_time = "No"; + lean_prompt_height = "Two lines"; + prompt_connection = "Disconnected"; + prompt_spacing = "Compact"; + icons = "Few icons"; + transient = "Yes"; + } + }"} >/dev/null 2>&1 + } + setupTide + ''; + }; +} diff --git a/programs/zsh/scripts.nix b/programs/fish/scripts.nix similarity index 52% rename from programs/zsh/scripts.nix rename to programs/fish/scripts.nix index aada7f9..77ab357 100644 --- a/programs/zsh/scripts.nix +++ b/programs/fish/scripts.nix @@ -1,12 +1,25 @@ { pkgs, ... }: { - calc = "${pkgs.python313}/bin/python -i ${ - pkgs.writeText "init.py" '' - from math import *; - # import numpy as np - '' - } "; - cp-media = name: media: + calc = "${pkgs.python313}/bin/python -i ${pkgs.writeText "init.py" '' + from math import *; + # import numpy as np + + kilo = 1000 + mega = 1000 * kilo + giga = 1000 * mega + tera = 1000 * giga + peta = 1000 * tera + + b = 1 + kib = 1024 + mib = 1024 * kib + gib = 1024 * mib + tib = 1024 * gib + pib = 1024 * tib + + ''} "; + cp-media = + name: media: let s = pkgs.writeScriptBin "cp-${name}" '' echo "copying to library ${media}" diff --git a/programs/gnome/default.nix b/programs/gnome/default.nix index 024c075..65baabc 100644 --- a/programs/gnome/default.nix +++ b/programs/gnome/default.nix @@ -14,229 +14,242 @@ let } { binding = "Return"; - command = "${pkgs.kitty}/bin/kitty"; + command = "${pkgs.custom.ghostty}/bin/ghostty"; name = "focus-terminal"; } { binding = "F12"; - command = "${pkgs.kitty}/bin/kitty -- ${((import ../zsh/scripts.nix) pkgs).calc}"; + command = "${pkgs.custom.ghostty}/bin/ghostty -- ${((import ../fish/scripts.nix) pkgs).calc}"; name = "calculator"; } ]; -in { +in +{ dconf = { enable = true; - settings = { - "org/gnome/shell" = { - # pinned app bar - favorite-apps = [ - "firefox.desktop" - "org.gnome.Nautilus.desktop" - "org.gnome.Settings.desktop" - "org.gnome.Terminal.desktop" - "jetbrains-clion-ec2b1366-55e3-4ecc-8780-ab6c7542eb56.desktop" - "discord-canary.desktop" - "io.element.Element.desktop" - "mattermost-desktop.desktop" - "org.mozilla.Thunderbird.desktop" - "spotify.desktop" - ]; - disable-user-extensions = false; - enabled-extensions = [ - "horizontal-workspaces@gnome-shell-extensions.gcampax.github.com" - "org.gnome-shell.desktop-icons" - "auto-move-windows@gnome-shell-extensions.gcampax.github.com" - ]; - }; + settings = + { + "org/gnome/shell" = { + # pinned app bar + favorite-apps = [ + "firefox.desktop" + "org.gnome.Nautilus.desktop" + "org.gnome.Settings.desktop" + "org.gnome.Terminal.desktop" + "jetbrains-clion-ec2b1366-55e3-4ecc-8780-ab6c7542eb56.desktop" + "discord-canary.desktop" + "io.element.Element.desktop" + "mattermost-desktop.desktop" + "org.mozilla.Thunderbird.desktop" + "spotify.desktop" + ]; + disable-user-extensions = false; + enabled-extensions = [ + "horizontal-workspaces@gnome-shell-extensions.gcampax.github.com" + "org.gnome-shell.desktop-icons" + "auto-move-windows@gnome-shell-extensions.gcampax.github.com" + ]; + }; - "org/gnome/desktop/background" = rec { - # picture-uri ="file:///${home.homeDirectory}/Pictures/backgrounds/2023-09-01-14-56-45-Road-saturated.png"; - # picture-uri-dark = picture-uri; - }; + "org/gnome/desktop/background" = rec { + # picture-uri ="file:///${home.homeDirectory}/Pictures/backgrounds/2023-09-01-14-56-45-Road-saturated.png"; + # picture-uri-dark = picture-uri; + }; - "org/gnome/desktop/input-sources" = { - per-window = false; - show-all-sources = false; - sources = [ "('xkb', 'us')" ]; - xkb-options = - [ "lv3:switch" "caps:escape" "eurosign:4" "compose:ralt" ]; - }; + "org/gnome/desktop/input-sources" = { + per-window = false; + show-all-sources = false; + sources = [ "('xkb', 'us')" ]; + xkb-options = [ + "lv3:switch" + "caps:escape" + "eurosign:4" + "compose:ralt" + ]; + }; - "org/gnome/desktop/interface" = { - clock-show-seconds = true; - clock-show-weekday = true; - color-scheme = "prefer-dark"; - cursor-theme = "Adwaita"; - enable-animations = true; - enable-hot-corners = true; - font-name = "Noto Sans, 10"; - }; + "org/gnome/desktop/interface" = { + clock-show-seconds = true; + clock-show-weekday = true; + color-scheme = "prefer-dark"; + cursor-theme = "Adwaita"; + enable-animations = true; + enable-hot-corners = true; + font-name = "Noto Sans, 10"; + }; - "org/gnome/desktop/peripherals/mouse" = { - accel-profile = "adaptive"; - natural-scroll = false; - }; + "org/gnome/desktop/peripherals/mouse" = { + accel-profile = "adaptive"; + natural-scroll = false; + }; - "org/gnome/desktop/peripherals/touchpad" = { - click-method = "fingers"; - disable-while-typing = false; - edge-scrolling-enabled = false; - natural-scroll = false; - send-events = "enabled"; - speed = 0.5; - tap-to-click = true; - two-finger-scrolling-enabled = true; - }; - "org/gnome/desktop/sound" = { - allow-volume-above-100-percent = true; - event-sounds = true; - }; + "org/gnome/desktop/peripherals/touchpad" = { + click-method = "fingers"; + disable-while-typing = false; + edge-scrolling-enabled = false; + natural-scroll = false; + send-events = "enabled"; + speed = 0.5; + tap-to-click = true; + two-finger-scrolling-enabled = true; + }; + "org/gnome/desktop/sound" = { + allow-volume-above-100-percent = true; + event-sounds = true; + }; - "org/gnome/desktop/wm/keybindings" = { - begin-move = unbound; - begin-resize = unbound; - close = [ "q" ]; - lower = unbound; - maximize = unbound; - minimize = [ "w" ]; - move-to-monitor-down = [ "Down" ]; - move-to-monitor-left = [ "Left" ]; - move-to-monitor-right = [ "Right" ]; - move-to-monitor-up = [ "Up" ]; - move-to-workspace-1 = [ "exclam" ]; - move-to-workspace-2 = [ "at" ]; - move-to-workspace-3 = [ "numbersign" ]; - move-to-workspace-4 = [ "dollar" ]; - move-to-workspace-5 = [ "percent" ]; - move-to-workspace-6 = [ "asciicircum" ]; - panel-main-menu = [ "" ]; - raise-or-lower = [ "s" ]; - switch-applications = [ "Tab" ]; - switch-applications-backward = [ "Tab" ]; - switch-input-source = unbound; - switch-input-source-backward = unbound; - switch-to-workspace-1 = [ "1" ]; - switch-to-workspace-2 = [ "2" ]; - switch-to-workspace-3 = [ "3" ]; - switch-to-workspace-4 = [ "4" ]; - switch-to-workspace-5 = [ "5" ]; - switch-to-workspace-6 = [ "6" ]; - switch-to-workspace-down = [ "j" ]; - switch-to-workspace-last = [ "0" ]; - switch-to-workspace-up = [ "k" ]; - switch-windows = unbound; - switch-windows-backward = unbound; - toggle-fullscreen = [ "f" ]; - toggle-maximized = [ "d" ]; - unmaximize = unbound; - }; + "org/gnome/desktop/wm/keybindings" = { + always-on-top = [ "t" ]; + begin-move = unbound; + begin-resize = unbound; + close = [ "q" ]; + lower = unbound; + maximize = unbound; + minimize = [ "w" ]; + move-to-monitor-down = [ "Down" ]; + move-to-monitor-left = [ "Left" ]; + move-to-monitor-right = [ "Right" ]; + move-to-monitor-up = [ "Up" ]; + move-to-workspace-1 = [ "exclam" ]; + move-to-workspace-2 = [ "at" ]; + move-to-workspace-3 = [ "numbersign" ]; + move-to-workspace-4 = [ "dollar" ]; + move-to-workspace-5 = [ "percent" ]; + move-to-workspace-6 = [ "asciicircum" ]; + panel-main-menu = [ "" ]; + raise-or-lower = [ "s" ]; + switch-applications = [ "Tab" ]; + switch-applications-backward = [ "Tab" ]; + switch-input-source = unbound; + switch-input-source-backward = unbound; + switch-to-workspace-1 = [ "1" ]; + switch-to-workspace-2 = [ "2" ]; + switch-to-workspace-3 = [ "3" ]; + switch-to-workspace-4 = [ "4" ]; + switch-to-workspace-5 = [ "5" ]; + switch-to-workspace-6 = [ "6" ]; + switch-to-workspace-down = [ "j" ]; + switch-to-workspace-last = [ "0" ]; + switch-to-workspace-up = [ "k" ]; + switch-windows = unbound; + switch-windows-backward = unbound; + toggle-fullscreen = [ "f" ]; + toggle-maximized = [ "d" ]; + unmaximize = unbound; + }; - "org/gnome/desktop/wm/preferences" = { - auto-raise = false; - button-layout = ":,maximize,minimize,close"; - focus-mode = "click"; - mouse-button-modifier = ""; - num-workspaces = 6; - resize-with-right-button = false; - visual-bell = false; - }; + "org/gnome/desktop/wm/preferences" = { + auto-raise = false; + button-layout = ":,maximize,minimize,close"; + focus-mode = "click"; + mouse-button-modifier = ""; + num-workspaces = 6; + resize-with-right-button = false; + visual-bell = false; + }; - "org/gnome/mutter" = { - center-new-windows = true; - dynamic-workspaces = false; - edge-tiling = true; - experimental-features = [ "scale-monitor-framebuffer" ]; - overlay-key = "Super_L"; - workspaces-only-on-primary = true; - }; + "org/gnome/mutter" = { + center-new-windows = true; + dynamic-workspaces = false; + edge-tiling = true; + experimental-features = [ "scale-monitor-framebuffer" ]; + overlay-key = "Super_L"; + workspaces-only-on-primary = true; + }; - "org/gnome/mutter/keybindings" = { - switch-monitor = [ "o" ]; - toggle-tiled-left = [ "bracketleft" ]; - toggle-tiled-right = [ "bracketright" ]; - }; + "org/gnome/mutter/keybindings" = { + switch-monitor = [ "o" ]; + toggle-tiled-left = [ "bracketleft" ]; + toggle-tiled-right = [ "bracketright" ]; + }; - "org/gnome/settings-daemon/plugins/media-keys" = { - area-screenshot = unbound; - area-screenshot-clip = [ "s" ]; - custom-keybindings = with builtins; - (map (i: - "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom${ - toString (i - 1) - }/") (genList (x: x + 1) (length custom-keys))); - email = [ "Display" ]; - home = [ "e" ]; - mic-mute = [ "AudioMicMute" ]; - next = [ "period" ]; - on-screen-keyboard = unbound; - pause = unbound; - play = [ "slash" ]; - previous = [ "comma" ]; - screensaver = [ "l" ]; - screenshot = unbound; - screenshot-clip = unbound; - stop = unbound; - volume-down = [ "AudioLowerVolume" ]; - volume-mute = [ "AudioMute" ]; - volume-up = [ "AudioRaiseVolume" ]; - window-screenshot = unbound; - window-screenshot-clip = unbound; - }; + "org/gnome/settings-daemon/plugins/media-keys" = { + area-screenshot = unbound; + area-screenshot-clip = [ "s" ]; + custom-keybindings = + with builtins; + (map ( + i: "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom${toString (i - 1)}/" + ) (genList (x: x + 1) (length custom-keys))); + email = [ "Display" ]; + home = [ "e" ]; + mic-mute = [ "AudioMicMute" ]; + next = [ "period" ]; + on-screen-keyboard = unbound; + pause = unbound; + play = [ "slash" ]; + previous = [ "comma" ]; + screensaver = [ "l" ]; + screenshot = unbound; + screenshot-clip = unbound; + stop = unbound; + volume-down = [ "AudioLowerVolume" ]; + volume-mute = [ "AudioMute" ]; + volume-up = [ "AudioRaiseVolume" ]; + window-screenshot = unbound; + window-screenshot-clip = unbound; + }; - "org/gnome/settings-daemon/plugins/power" = { - ambient-enabled = false; - idle-dim = false; - power-button-action = "nothing"; - power-saver-profile-on-low-battery = true; - sleep-inactive-ac-timeout = 7200; - sleep-inactive-ac-type = "nothing"; - sleep-inactive-battery-timeout = 7200; - sleep-inactive-battery-type = "suspend"; - }; - "org/gnome/shell/extensions/auto-move-windows" = { - application-list = [ - "firefox.desktop:1" - "discord.desktop:3" - "jetbrains-clion.desktop:2" - "jetbrains-goland.desktop:2" - "jetbrains-pycharm.desktop:2" - "jetbrains-idea.desktop:2" - "spotify.desktop:5" - ]; - }; + "org/gnome/settings-daemon/plugins/power" = { + ambient-enabled = false; + idle-dim = false; + power-button-action = "nothing"; + power-saver-profile-on-low-battery = true; + sleep-inactive-ac-timeout = 7200; + sleep-inactive-ac-type = "nothing"; + sleep-inactive-battery-timeout = 7200; + sleep-inactive-battery-type = "suspend"; + }; + "org/gnome/shell/extensions/auto-move-windows" = { + application-list = [ + "firefox.desktop:1" + "discord.desktop:3" + "jetbrains-clion.desktop:2" + "jetbrains-goland.desktop:2" + "jetbrains-pycharm.desktop:2" + "jetbrains-idea.desktop:2" + "spotify.desktop:5" + ]; + }; - "org/gnome/shell/keybindings" = { - open-application-menu = [ "Menu" ]; - show-screenshot-ui = [ "s" ]; - switch-to-application-1 = unbound; - switch-to-application-2 = unbound; - switch-to-application-3 = unbound; - switch-to-application-4 = unbound; - switch-to-application-5 = unbound; - switch-to-application-6 = unbound; - switch-to-application-7 = unbound; - switch-to-application-8 = unbound; - switch-to-application-9 = unbound; - toggle-message-tray = unbound; - toggle-overview = [ "p" ]; - }; + "org/gnome/shell/keybindings" = { + open-application-menu = [ "Menu" ]; + show-screenshot-ui = [ "s" ]; + switch-to-application-1 = unbound; + switch-to-application-2 = unbound; + switch-to-application-3 = unbound; + switch-to-application-4 = unbound; + switch-to-application-5 = unbound; + switch-to-application-6 = unbound; + switch-to-application-7 = unbound; + switch-to-application-8 = unbound; + switch-to-application-9 = unbound; + toggle-message-tray = unbound; + toggle-overview = [ "p" ]; + }; - "org/gnome/terminal/legacy" = { - menu-accelerator-enabled = false; - mnemonics-enabled = true; - new-terminal-mode = "window"; - shortcuts-enabled = true; - theme-variant = "dark"; - }; + "org/gnome/terminal/legacy" = { + menu-accelerator-enabled = false; + mnemonics-enabled = true; + new-terminal-mode = "window"; + shortcuts-enabled = true; + theme-variant = "dark"; + }; - "org/gnome/terminal/legacy/keybindings" = { zoom-in = "equal"; }; - } // (with builtins; - foldl' (a: b: a // b) { } (map (i: { - "org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom${ - toString (i - 1) - }" = elemAt custom-keys (i - 1); - }) (genList (x: x + 1) (length custom-keys)))); + "org/gnome/terminal/legacy/keybindings" = { + zoom-in = "equal"; + }; + } + // ( + with builtins; + foldl' (a: b: a // b) { } ( + map (i: { + "org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom${toString (i - 1)}" = + elemAt custom-keys + (i - 1); + }) (genList (x: x + 1) (length custom-keys)) + ) + ); }; } - diff --git a/programs/jj/default.nix b/programs/jj/default.nix new file mode 100644 index 0000000..aa86285 --- /dev/null +++ b/programs/jj/default.nix @@ -0,0 +1,49 @@ +{ pkgs, ... }: +{ + programs.jujutsu = { + enable = true; + package = pkgs.custom.jujutsu; + + settings = { + user = { + email = "jonathan@donsz.nl"; + name = "Jonathan Dönszelmann"; + }; + + ui = { + pager = "${pkgs.delta}/bin/delta"; + # for delta + diff.format = "git"; + + default-command = [ + "log" + "--reversed" + "--no-pager" + ]; + merge-editor = [ + "${pkgs.meld}/bin/meld" + "$left" + "$base" + "$right" + "-o" + "$output" + "--auto-merge" + ]; + # diff-editor = "${pkgs.meld}/bin/meld"; + }; + + revsets.log = "@ | ancestors(trunk()..(visible_heads() & mine()), 2) | trunk()"; + + signing = { + sign-all = true; + backend = "ssh"; + key = "~/.ssh/id_ed25519.pub"; + }; + + git = { + push-bookmark-prefix = "jdonszelmann/"; + private-commits = "description(glob:'wip:*')"; + }; + }; + }; +} diff --git a/programs/kanata/cfg.kbd b/programs/kanata/cfg.kbd index 9c6ecf2..1d5dd8b 100644 --- a/programs/kanata/cfg.kbd +++ b/programs/kanata/cfg.kbd @@ -20,11 +20,29 @@ lctl lmet lalt spc ralt rctl ) -(defalias - esc (tap-hold 800 800 esc caps) - cap (tap-dance 300 (esc C-k esc)) +(deflayer control + @esc + grv 1 2 3 4 5 6 7 8 9 0 - = bspc + tab q w e @replay t y u i o p @wup @wdown \ + @cap a s d f g left down up right ; ' bspc + @lst z x C-c v bspc n @macro , . C-f rsft + lctl lmet lalt spc ralt rctl +) + +(defalias + esc (tap-hold 800 800 esc caps) + + cap (tap-hold-release 200 200 + (multi dynamic-macro-record-stop esc) + (layer-while-held control) + ) + + macro (dynamic-macro-record 0) + replay (dynamic-macro-play 0) + + wup (mwheel-up 50 120) + wdown (mwheel-down 50 120) - qwr (layer-switch qwerty) lst (tap-hold-release 200 200 C-k lsft) ) diff --git a/programs/kitty/default.nix b/programs/kitty/default.nix index e7a2665..83562e8 100644 --- a/programs/kitty/default.nix +++ b/programs/kitty/default.nix @@ -1,42 +1,51 @@ -{ pkgs, inputs, ... }: { - programs.kitty = { - enable = true; - font.name = "Jetbrains Mono"; - font.size = 13.0; - font.package = pkgs.jetbrains-mono; +{ pkgs, inputs, ... }: +{ + programs.kitty = { + enable = true; + font = { + name = "Jetbrains Mono"; + size = 13.0; + package = pkgs.jetbrains-mono; + }; - settings = { - scrollback_lines = 20000; + settings = { + scrollback_lines = 20000; + allow_hyperlinks = true; - repaint_delay = 10; - input_delay = 3; + repaint_delay = 10; + input_delay = 3; - enable_audio_bell = false; - update_check_interval = 0; + enable_audio_bell = false; + update_check_interval = 0; - initial_window_width = "95c"; - initial_window_height = "30c"; - remember_window_size = "no"; + initial_window_width = "95c"; + initial_window_height = "30c"; + remember_window_size = "no"; - draw_minimal_borders = false; - hide_window_decorations = true; + draw_minimal_borders = false; + hide_window_decorations = true; - shell = "${pkgs.tmux}/bin/tmux"; - clipboard_control = "write-clipboard write-primary read-clipboard read-primary"; + shell = "${pkgs.tmux}/bin/tmux"; + clipboard_control = "write-clipboard write-primary read-clipboard read-primary"; - foreground = "#fcfcfc"; - background = "#232627"; - linux_display_server = "auto"; + foreground = "#fcfcfc"; + background = "#232627"; + linux_display_server = "auto"; + }; + + keybindings = { + "ctrl+f" = "launch --location=hsplit --allow-remote-control kitty +kitten ${inputs.kitty-search}/search.py @active-kitty-window-id"; + "ctrl+alt+r" = "load_config_file"; + "ctrl+shift+r" = "no_op"; + "super+`" = "no_op"; + "ctrl+EQUAL" = "change_font_size all +2.0"; + "ctrl+minus" = "change_font_size all -2.0"; + "ctrl+0" = "change_font_size all 0"; + # "ctrl+/" = "send_text all "; + }; + + extraConfig = '' + mouse_map left click ungrabbed no-op + ''; }; - - keybindings = { - "ctrl+f" = "launch --location=hsplit --allow-remote-control kitty +kitten ${inputs.kitty-search}/search.py @active-kitty-window-id"; - "ctrl+alt+r" = "load_config_file"; - "ctrl+shift+r" = "no_op"; - "ctrl+EQUAL" = "change_font_size all +2.0"; - "ctrl+minus" = "change_font_size all -2.0"; - "ctrl+0" = "change_font_size all 0"; - # "ctrl+/" = "send_text all "; - }; - }; } diff --git a/programs/nvim/config.lua b/programs/nvim/config.lua index 3be2da0..e100cf4 100644 --- a/programs/nvim/config.lua +++ b/programs/nvim/config.lua @@ -16,16 +16,6 @@ vim.filetype.add({ } }) -require("onedark").setup { - style = "deep", - highlights = { - ["@lsp.type.comment"] = {fg = '#77B767'}, - ["@comment.documentation.rust"] = {fg = '#77B767'}, - ["@comment.documentation"] = {fg = '#77B767'}, - ["@comment"] = {fg = '#426639'} - } -} -require("onedark").load() local cmp = require("cmp") cmp.setup { @@ -90,18 +80,12 @@ local esc = vim.api.nvim_replace_termcodes( local api = require('Comment.api') vim.keymap.set("n", "", ":lua require('Comment.api').toggle.linewise.current() j", { remap = true }) +vim.keymap.set("i", "", ":lua require('Comment.api').toggle.linewise.current()", { remap = true }) vim.keymap.set("x", "", function() vim.api.nvim_feedkeys(esc, 'nx', false) api.toggle.linewise(vim.fn.visualmode()) end, { remap = true }) --- indent and dedent using tab/shift-ta -vim.keymap.set("n", "", ">>_") -vim.keymap.set("n", "", "<<_") -vim.keymap.set("i", "", "") -vim.keymap.set("v", "", ">gv") -vim.keymap.set("v", "", "', builtin.find_files, {}) vim.keymap.set('n', 'f', builtin.live_grep, {}) vim.keymap.set('n', 'h', builtin.pickers, {}) -- vim.keymap.set('n', 'h', builtin.search_history, {}) -vim.keymap.set('n', 'b', (function() builtin.buffers({sort_mru = true}) end), {}) -vim.keymap.set('n', 'd', "Telescope diagnostics bufnr=0", {}) -vim.keymap.set('n', 'ad', builtin.diagnostics, {}) +vim.keymap.set('n', 'b', function() builtin.buffers({sort_mru = true}) end, {}) +vim.keymap.set('n', 'd', function() require('telescope.builtin').diagnostics({ severity_bound = 0, bufnr = 0 }) end, {}) +vim.keymap.set('n', 'ad', function() require('telescope.builtin').diagnostics({ severity_bound = 0 }) end, {}) vim.keymap.set('n', 'em', "RustLsp expandMacro") vim.keymap.set("n", "]d", vim.diagnostic.goto_next) vim.keymap.set("n", "[d", vim.diagnostic.goto_prev) @@ -162,76 +146,11 @@ vim.keymap.set("n", "x", require("telescope.builtin").resume, { desc = "Resume", }) -local gitsigns = require('gitsigns') -vim.keymap.set('n', 'gr', gitsigns.reset_hunk) -vim.keymap.set('n', 'gd', gitsigns.diffthis) +-- local gitsigns = require('gitsigns') +-- vim.keymap.set('n', 'gr', gitsigns.reset_hunk) +-- vim.keymap.set('n', 'gd', gitsigns.diffthis) +-- vim.keymap.set({'o', 'x'}, 'ig', ':Gitsigns select_hunk') -vim.keymap.set({'o', 'x'}, 'ig', ':Gitsigns select_hunk') -vim.keymap.set('n', 't', ':Neotree toggle') - --- ============ files and directories ============== - --- don't change the directory when a file is opened --- to work more like an IDE -vim.opt.autochdir = false - --- ============ tabs and indentation ============== --- automatically indent the next line to the same depth as the current line -vim.opt.autoindent = true -vim.opt.smartindent = true -vim.opt.smarttab = true --- backspace across lines -vim.opt.backspace = { "indent", "eol", "start" } --- :set backspace=indent,eol,start - -vim.opt.tabstop = 4 -vim.opt.softtabstop = 4 -vim.opt.shiftwidth = 4 -vim.opt.expandtab = true - --- ============ line numbers ============== --- set number,relativenumber -vim.opt.number = true -vim.opt.relativenumber = true - --- ============ history ============== -vim.cmd([[ - set undodir=~/.vimdid - set undofile -]]) - -vim.opt.undofile = true - --- ============ miscelaneous ============== -vim.opt.belloff = "all" - --- show (usually) hidden characters -vim.opt.list = true -vim.opt.listchars = { - nbsp = "¬", - extends = "»", - precedes = "«", - trail = "·", - tab = ">-", -} - --- paste and yank use global system clipboard -vim.opt.clipboard = "unnamedplus" - --- show partial commands entered in the status line --- (like show "da" when typing "daw") -vim.opt.showcmd = true -vim.opt.mouse = "a" - -vim.opt.modeline = true - --- highlight the line with the cursor on it -vim.opt.cursorline = true - --- enable spell checking (todo: plugin?) -vim.opt.spell = false - -vim.opt.wrap = false -- better search vim.cmd([[ @@ -264,11 +183,6 @@ vim.cmd([[ nnoremap * *zz nnoremap # #zz nnoremap g* g*zz - - " very magic by default - nnoremap ? ?\v - nnoremap / /\v - cnoremap %s/ %sm/ ]]) vim.cmd([[ diff --git a/programs/nvim/default.nix b/programs/nvim/default.nix index 62be7fc..cfd7a30 100644 --- a/programs/nvim/default.nix +++ b/programs/nvim/default.nix @@ -1,28 +1,17 @@ { pkgs, ... }: let - render-markdown = pkgs.vimUtils.buildVimPlugin { - name = "render-markdown"; - src = pkgs.fetchFromGitHub { - owner = "MeanderingProgrammer"; - repo = "markdown.nvim"; - rev = "78ef39530266b3a0736c48b46c3f5d1ab022c7db"; - hash = "sha256-mddnBvIrekHh60Ix6qIYAnv10Mu40LamGI47EXk9wSo="; - }; - }; - # for lsp/cmp inside markdown code blocks - otter = pkgs.vimUtils.buildVimPlugin { - name = "otter"; - src = pkgs.fetchFromGitHub { - owner = "jmbuhr"; - repo = "otter.nvim"; - rev = "cbb1be0586eae18cbea38ada46af428d2bebf81a"; - hash = "sha256-eya/8rG3O8UFeeBRDa5U8v3qay+q3iFwPnYtdX7ptCA="; - }; + map = mode: key: action: { + inherit mode key action; }; in { home = { sessionVariables = { EDITOR = "nvim"; }; }; + imports = [ + ./options.nix + ./plugins.nix + ]; + programs.nixvim = { enable = true; globals.mapleader = " "; @@ -32,13 +21,50 @@ in vimAlias = true; # Highlight and remove extra white spaces - highlight.ExtraWhitespace.bg = "red"; + # same color as cursorline as per + # https://github.com/joshdick/onedark.vim/blob/390b893d361c356ac1b00778d849815f2aa44ae4/autoload/onedark.vim + highlight.ExtraWhitespace.bg = "#2C323C"; match.ExtraWhitespace = "\\s\\+$"; - package = pkgs.neovim-unwrapped; - clipboard.providers.wl-copy.enable = true; + performance = { + byteCompileLua.enable = true; + combinePlugins = { + enable = true; + + standalonePlugins = [ + # clashes with lualine + "onedark.nvim" + ]; + }; + }; + + # package = pkgs.neovim-unwrapped; + package = (pkgs.neovim-unwrapped.override { lua = pkgs.luajit; }).overrideAttrs (_: { + version = "git"; + src = pkgs.fetchFromGitHub { + owner = "neovim"; + repo = "neovim"; + rev = "76dcc7029b200e1d85024d7ba4a34c602e730dbe"; + hash = "sha256-y3LmGebXuQhLz9w1IzkDU8b464WvMvPCbIImpVvxmcI="; + }; + buildInputs = [ + (pkgs.utf8proc.overrideAttrs (_: { + version = "git"; + + src = pkgs.fetchFromGitHub + { + owner = "JuliaStrings"; + repo = "utf8proc"; + rev = "3de4596fbe28956855df2ecb3c11c0bbc3535838"; + hash = "sha256-DNnrKLwks3hP83K56Yjh9P3cVbivzssblKIx4M/RKqw="; + }; + + })) + ] ++ pkgs.neovim-unwrapped.buildInputs ++ pkgs.neovim-unwrapped.nativeBuildInputs; + }); + keymaps = [ { key = ""; @@ -53,339 +79,36 @@ in action = "Lspsaga code_action"; } + # { + # key = "/"; + # action = "lua require('spectre').open_file_search({select_word=true})"; + # } + + (map "n" "t" "Neotree toggle") + + # tab for indent/dedent + (map "n" "" ">>_") + (map "n" "" "<<_") + (map "i" "" "") + (map "v" "" ">gv") + (map "v" "" "" = "navigate_up"; - "." = "set_root"; - "/" = "fuzzy_finder"; - "f" = "filter_on_submit"; - "h" = "show_help"; - }; - }; - filesystem = { - followCurrentFile.enabled = true; - filteredItems = { - hideHidden = false; - hideDotfiles = false; - forceVisibleInEmptyFolder = true; - hideGitignored = false; - }; - }; - }; - - - nvim-lightbulb = { - enable = true; - settings = { - autocmd = { - enabled = true; - updatetime = 200; - }; - line = { - enabled = true; - }; - number = { - enabled = true; - hl = "LightBulbNumber"; - }; - float = { - enabled = false; - text = "💡"; - }; - sign = { - enabled = true; - text = "💡"; - }; - status_text = { - enabled = false; - text = "💡"; - }; - }; - }; - - gitsigns = { - enable = true; - - settings = { - current_line_blame = true; - current_line_blame_opts = { - virt_text = true; - virt_text_pos = "eol"; - }; - }; - }; - - lspsaga = { - enable = true; - lightbulb.enable = false; - codeAction.keys = { - quit = ""; - }; - }; - - typst-vim = { - enable = true; - settings = { - cmd = "${pkgs.typst}/bin/typst"; - conceal_math = 1; - auto_close_toc = 1; - }; - }; - - lualine = { - enable = true; - settings.options.theme = "onedark"; - }; - - rustaceanvim = { - enable = true; - rustAnalyzerPackage = pkgs.rust-analyzer; - - settings = { - auto_attach = true; - server = { - standalone = false; - default_settings = { - rust-analyzer = { - inlayHints = { lifetimeElisionHints = { enable = "always"; }; }; - check = { command = "clippy"; }; - cachePriming.enable = false; - }; - # cargo = { - # buildScripts.enable = true; - # features = "all"; - # runBuildScripts = true; - # loadOutDirsFromCheck = true; - # }; - # checkOnSave = true; - # check = { - # allFeatures = true; - # command = "clippy"; - # extraArgs = [ "--no-deps" ]; - # }; - # procMacro = { enable = true; }; - # imports = { - # granularity = { group = "module"; }; - # prefix = "self"; - # }; - # files = { - # excludeDirs = - # [ ".cargo" ".direnv" ".git" "node_modules" "target" ]; - # }; - # - # inlayHints = { - # bindingModeHints.enable = true; - # closureStyle = "rust_analyzer"; - # closureReturnTypeHints.enable = "always"; - # discriminantHints.enable = "always"; - # expressionAdjustmentHints.enable = "always"; - # implicitDrops.enable = true; - # lifetimeElisionHints.enable = "always"; - # rangeExclusiveHints.enable = true; - # reborrowHints.enable = "mutable"; - # }; - # - # rustc.source = "discover"; - # - # options.diagnostics = { - # enable = true; - # styleLints.enable = true; - # }; - }; - }; - }; - }; - - lsp = { - enable = true; - - servers = { - astro.enable = true; - cssls.enable = true; - nil_ls = { - enable = true; - extraOptions = { - nix = { - maxMemoryMB = 0; - flake = { - autoArchive = true; - autoEvalInputs = true; - nixpkgsInputName = "nixpkgs"; - }; - }; - }; - }; - - clangd = { - enable = true; - filetypes = [ "c" "cpp" "objc" "objcpp" ]; - }; - eslint = { - enable = true; - filetypes = - [ "javascript" "javascriptreact" "typescript" "typescriptreact" ]; - }; - html = { - enable = true; - filetypes = [ "html" ]; - }; - jsonls = { - enable = true; - filetypes = [ "json" "jsonc" ]; - }; - pyright = { - enable = true; - filetypes = [ "python" ]; - }; - bashls = { - enable = true; - - filetypes = [ "sh" "bash" ]; - }; - # ts_ls = { - # enable = true; - # filetypes = - # [ "javascript" "javascriptreact" "typescript" "typescriptreact" ]; - # }; - marksman.enable = true; - yamlls = { - enable = true; - filetypes = [ "yaml" ]; - }; + highlights = { + # bright green doccomments + "@lsp.type.comment".fg = "#77B767"; + "@comment.documentation.rust".fg = "#77B767"; + "@comment.documentation".fg = "#77B767"; + "@comment".fg = "#426639"; }; - inlayHints = true; - - keymaps = { - lspBuf = { - ";" = "format"; - "gh" = "hover"; - }; - }; }; - floaterm = { - enable = true; - opener = "edit"; - width = 0.8; - height = 0.8; - }; - telescope = { - enable = true; - - extensions.ui-select.enable = true; - extensions.fzf-native.enable = true; - - settings = { - defaults = { - path_display = [ "smart" ]; - layout_strategy = "horizontal"; - layout_config = { - width = 0.99; - height = 0.99; - }; - }; - }; - }; - - # tabs - barbar = { - enable = true; - settings = { - options.diagnostics = "nvim_lsp"; - focus_on_close = "previous"; - }; - }; - - none-ls = { - enable = true; - sources = { - formatting.nixpkgs_fmt.enable = true; - code_actions.statix.enable = true; - diagnostics = { - statix.enable = true; - deadnix.enable = true; - }; - }; - }; - nix.enable = true; - - web-devicons.enable = true; }; - extraPlugins = with pkgs.vimPlugins; [ - onedark-nvim - vim-vsnip - cmp-vsnip - cmp-path - cmp-spell - nvim-web-devicons - telescope-ui-select-nvim - telescope-fzf-native-nvim - vim-suda - render-markdown - otter - vim-astro - nvim-web-devicons - vim-visual-multi - vim-gh-line - # vim-bufkill - BufOnly-vim - neoconf-nvim - vim-autoswap - targets-vim - ]; extraConfigLuaPre = '' require("neoconf").setup({}) @@ -396,10 +119,5 @@ in } '' + (builtins.readFile ./config.lua); - opts = { - lazyredraw = false; - startofline = true; - showmatch = true; - }; }; } diff --git a/programs/nvim/options.nix b/programs/nvim/options.nix new file mode 100644 index 0000000..4985440 --- /dev/null +++ b/programs/nvim/options.nix @@ -0,0 +1,53 @@ +_: { + programs.nixvim.opts = { + lazyredraw = true; + startofline = true; + showmatch = true; + + belloff = "all"; + showcmd = true; + mouse = "a"; + modeline = true; + wrap = false; + spell = false; + + + # don't change the directory when a file is opened + # to work more like an IDE + autochdir = false; + + autoindent = true; + smartindent = true; + smarttab = true; + + backspace = [ "indent" "eol" "start" ]; + + list = true; + undofile = true; + undodir = "/home/jonathan/.vimdid"; + + tabstop = 4; + softtabstop = 4; + shiftwidth = 4; + expandtab = true; + + # relative line numbers except the current line + number = true; + relativenumber = true; + + # show (usually) hidden characters + listchars = { + nbsp = "¬"; + extends = "»"; + precedes = "«"; + trail = "·"; + tab = ">-"; + }; + + # highlight current line + cursorline = true; + + # clipboard == system clipboard + clipboard = "unnamedplus"; + }; +} diff --git a/programs/nvim/plugins.nix b/programs/nvim/plugins.nix new file mode 100644 index 0000000..da689e4 --- /dev/null +++ b/programs/nvim/plugins.nix @@ -0,0 +1,527 @@ +{ pkgs, ... }: +let + render-markdown = pkgs.vimUtils.buildVimPlugin { + name = "render-markdown"; + src = pkgs.fetchFromGitHub { + owner = "MeanderingProgrammer"; + repo = "markdown.nvim"; + rev = "78ef39530266b3a0736c48b46c3f5d1ab022c7db"; + hash = "sha256-mddnBvIrekHh60Ix6qIYAnv10Mu40LamGI47EXk9wSo="; + }; + }; + # for lsp/cmp inside markdown code blocks + otter = pkgs.vimUtils.buildVimPlugin { + name = "otter"; + src = pkgs.fetchFromGitHub { + owner = "jmbuhr"; + repo = "otter.nvim"; + rev = "cbb1be0586eae18cbea38ada46af428d2bebf81a"; + hash = "sha256-eya/8rG3O8UFeeBRDa5U8v3qay+q3iFwPnYtdX7ptCA="; + }; + }; +in +{ + programs.nixvim = { + plugins = { + treesitter-textobjects = { + enable = true; + lspInterop.enable = true; + + select = { + enable = true; + + keymaps = { + "ai" = { + query = "@impl.outer"; + }; + "ii" = { + query = "@impl.inner"; + }; + "af" = { + query = "@function.outer"; + }; + "if" = { + query = "@function.inner"; + }; + + "ac" = { + query = "@conditional.outer"; + }; + "ic" = { + query = "@conditional.inner"; + }; + "al" = { + query = "@loop.outer"; + }; + "il" = { + query = "@loop.inner"; + }; + }; + }; + + move = { + enable = true; + setJumps = true; + gotoNextStart = { + "]f" = { + query = "@function.outer"; + }; + "]c" = { + query = "@conditional.outer"; + }; + "]l" = { + query = "@loop.outer"; + }; + "]i" = { + query = "@impl.outer"; + }; + }; + gotoNextEnd = { + "]F" = { + query = "@function.outer"; + }; + "]C" = { + query = "@conditional.outer"; + }; + "]L" = { + query = "@loop.outer"; + }; + "]I" = { + query = "@impl.outer"; + }; + }; + gotoPreviousStart = { + "[f" = { + query = "@function.outer"; + }; + "[c" = { + query = "@conditional.outer"; + }; + "[l" = { + query = "@loop.outer"; + }; + "[i" = { + query = "@impl.outer"; + }; + }; + gotoPreviousEnd = { + "[F" = { + query = "@function.outer"; + }; + "[C" = { + query = "@conditional.outer"; + }; + "[L" = { + query = "@loop.outer"; + }; + "[I" = { + query = "@impl.outer"; + }; + }; + }; + }; + + treesitter = { + enable = true; + + nixGrammars = false; + nixvimInjections = false; + + settings = { + indent.enable = true; + + ensure_installed = "all"; + ignore_install = [ + "wing" + ]; + + highlight.enable = true; + + incremental_selection = { + enable = true; + keymaps = { + # init_selection = ""; + scope_incremental = "ss"; + node_incremental = "si"; + node_decremental = "sd"; + }; + }; + }; + }; + rainbow-delimiters.enable = true; + vim-surround.enable = true; + cmp-nvim-lsp.enable = true; + lsp-format.enable = true; + fugitive.enable = false; + lspkind.enable = true; + crates-nvim.enable = true; + fidget.enable = true; + cmp.enable = true; + nvim-autopairs.enable = true; + + # dial.nvim + + which-key = { + enable = true; + }; + + auto-session = { + enable = true; + settings = { + auto_save_enabled = true; + auto_restore_enabled = true; + pre_save_cmds = [ "Neotree close" ]; + post_restore_cmds = [ "Neotree filesystem show" ]; + }; + }; + + comment = { + enable = true; + + settings = { + sticky = true; + }; + }; + + neo-tree = { + enable = true; + closeIfLastWindow = true; + enableGitStatus = false; + + window = { + position = "right"; + width = 30; + mappings = { + "" = "navigate_up"; + "." = "set_root"; + "/" = "fuzzy_finder"; + "f" = "filter_on_submit"; + "h" = "show_help"; + }; + }; + filesystem = { + followCurrentFile.enabled = true; + filteredItems = { + hideHidden = false; + hideDotfiles = false; + forceVisibleInEmptyFolder = true; + hideGitignored = false; + }; + }; + }; + + nvim-lightbulb = { + enable = true; + settings = { + autocmd = { + enabled = true; + updatetime = 200; + }; + line = { + enabled = true; + }; + number = { + enabled = true; + hl = "LightBulbNumber"; + }; + float = { + enabled = false; + text = "💡"; + }; + sign = { + enabled = true; + text = "💡"; + }; + status_text = { + enabled = false; + text = "💡"; + }; + }; + }; + + # git-conflict = { + # enable = true; + # settings = { + # default_mappings = { + # both = "cb"; + # none = "c0"; + # ours = "co"; + # prev = "]x"; + # next = "[x"; + # theirs = "ct"; + # }; + # disable_diagnostics = false; + # highlights = { + # current = "DiffText"; + # incoming = "DiffAdd"; + # }; + # list_opener = "conflicts"; + # }; + # }; + # gitsigns = { + # enable = true; + # + # settings = { + # current_line_blame = true; + # current_line_blame_opts = { + # virt_text = true; + # virt_text_pos = "eol"; + # }; + # }; + # }; + + lspsaga = { + enable = true; + lightbulb.enable = false; + codeAction.keys = { + quit = ""; + }; + }; + + typst-vim = { + enable = true; + settings = { + cmd = "${pkgs.typst}/bin/typst"; + conceal_math = 1; + auto_close_toc = 1; + }; + }; + + lualine = { + enable = true; + settings.options.theme = "onedark"; + }; + + rustaceanvim = { + enable = true; + rustAnalyzerPackage = pkgs.rust-analyzer; + + settings = { + auto_attach = true; + server = { + standalone = false; + default_settings = { + rust-analyzer = { + inlayHints = { + lifetimeElisionHints.enable = "always"; + expressionAdjustmentHints = { + enable = "always"; + mode = "prefer_postfix"; + }; + discriminantHints.enable = "always"; + }; + # check = { + # command = "+nightly clippy"; + # }; + cachePriming.enable = false; + + diagnostic = { + refreshSupport = true; + }; + }; + # cargo = { + # buildScripts.enable = true; + # features = "all"; + # runBuildScripts = true; + # loadOutDirsFromCheck = true; + # }; + # checkOnSave = true; + # check = { + # allFeatures = true; + # command = "clippy"; + # extraArgs = [ "--no-deps" ]; + # }; + # procMacro = { enable = true; }; + # imports = { + # granularity = { group = "module"; }; + # prefix = "self"; + # }; + # files = { + # excludeDirs = + # [ ".cargo" ".direnv" ".git" "node_modules" "target" ]; + # }; + # + # inlayHints = { + # bindingModeHints.enable = true; + # closureStyle = "rust_analyzer"; + # closureReturnTypeHints.enable = "always"; + # discriminantHints.enable = "always"; + # expressionAdjustmentHints.enable = "always"; + # implicitDrops.enable = true; + # lifetimeElisionHints.enable = "always"; + # rangeExclusiveHints.enable = true; + # reborrowHints.enable = "mutable"; + # }; + # + # rustc.source = "discover"; + # + options.diagnostics = { + enable = true; + styleLints.enable = true; + }; + }; + }; + }; + }; + + lsp = { + enable = true; + + servers = { + astro.enable = true; + cssls.enable = true; + nil_ls = { + enable = true; + settings = { + formatting.command = [ "${(pkgs.lib.getExe pkgs.nixfmt-rfc-style)}" ]; + }; + extraOptions = { + nix = { + maxMemoryMB = 0; + flake = { + autoArchive = true; + autoEvalInputs = true; + nixpkgsInputName = "nixpkgs"; + }; + }; + }; + }; + + clangd = { + enable = true; + filetypes = [ + "c" + "cpp" + "objc" + "objcpp" + ]; + }; + eslint = { + enable = true; + filetypes = [ + "javascript" + "javascriptreact" + "typescript" + "typescriptreact" + ]; + }; + html = { + enable = true; + filetypes = [ "html" ]; + }; + jsonls = { + enable = true; + filetypes = [ + "json" + "jsonc" + ]; + }; + pyright = { + enable = true; + filetypes = [ "python" ]; + }; + bashls = { + enable = true; + + filetypes = [ + "sh" + "bash" + ]; + }; + # ts_ls = { + # enable = true; + # filetypes = + # [ "javascript" "javascriptreact" "typescript" "typescriptreact" ]; + # }; + marksman.enable = true; + yamlls = { + enable = true; + filetypes = [ "yaml" ]; + }; + }; + + inlayHints = true; + + keymaps = { + lspBuf = { + ";" = "format"; + "gh" = "hover"; + }; + }; + }; + floaterm = { + enable = true; + opener = "edit"; + width = 0.8; + height = 0.8; + }; + telescope = { + enable = true; + + extensions.ui-select.enable = true; + extensions.fzf-native.enable = true; + + settings = { + defaults = { + path_display = [ "smart" ]; + layout_strategy = "horizontal"; + layout_config = { + width = 0.99; + height = 0.99; + }; + }; + }; + }; + + # tabs + barbar = { + enable = true; + settings = { + options.diagnostics = "nvim_lsp"; + focus_on_close = "previous"; + }; + }; + + none-ls = { + enable = true; + sources = { + formatting.nixpkgs_fmt.enable = true; + code_actions.statix.enable = true; + diagnostics = { + statix.enable = true; + deadnix.enable = true; + }; + }; + }; + nix.enable = true; + + web-devicons.enable = true; + }; + extraPlugins = with pkgs.vimPlugins; [ + vim-vsnip + cmp-vsnip + cmp-path + cmp-spell + + telescope-ui-select-nvim + telescope-fzf-native-nvim + + vim-suda + render-markdown + otter + vim-astro + nvim-web-devicons + vim-visual-multi + vim-gh-line + BufOnly-vim + neoconf-nvim + vim-autoswap + targets-vim + + # jj + vim-jjdescription + + ]; + + }; +} diff --git a/programs/tmux/default.nix b/programs/tmux/default.nix index 9dd2ad3..99db36a 100644 --- a/programs/tmux/default.nix +++ b/programs/tmux/default.nix @@ -36,11 +36,13 @@ # for special characters to work right # like # set-window-option -g xterm-keys on + set -g default-terminal "screen-256color" set -g set-titles on set -s escape-time 0 - set-option -g default-shell /bin/zsh + set-option -g default-shell ${pkgs.fish}/bin/fish + set -ga terminal-features "\*:hyperlinks" set-window-option -g mode-keys vi @@ -119,7 +121,22 @@ 'if-shell -t= "#{?alternate_on,true,false} || echo \"#{tmux_commands_with_legacy_scroll}\" | grep -q \"#{pane_current_command}\"" \ "send -t= Down" "send -Mt="' - # bind -n DoubleClick1Pane run-shell "${pkgs.xdragon}/bin/dragon -x '#{pane_current_path}/#{mouse_word}'" + bind-key -T root DoubleClick1Pane run-shell "cd '#{pane_current_path}'; echo '#{mouse_line}' | ${pkgs.writeScriptBin "open-file" '' + open_file () { + input=`cat` + link=$(echo "$input" | grep -Po '[^ \\]*/[^ \\]*\.[^ \\]*\:[0-9]+' | sed 's/\:/|/g') + + if [ ! -z "$link" ]; then + echo "LINK = $link" + vim_proc=$(pgrep vim | xargs pwdx | grep $(pwd -P) | awk '{print $1}' | sed 's/\:*$//g' | xargs -I{} find /run/user/1000 -depth -maxdepth 1 -name "nvim.{}.0") + + nvim --server "$vim_proc" --remote-send ":e $link" + fi + } + + open_file 2>&1 >> ~/open-file.log + + ''}/bin/open-file" ''; }; } diff --git a/programs/zsh/default.nix b/programs/zsh/default.nix deleted file mode 100644 index cb15425..0000000 --- a/programs/zsh/default.nix +++ /dev/null @@ -1,127 +0,0 @@ -{ pkgs, lib, ... }: -with builtins; -with lib.attrsets; -let - scripts = (import ./scripts.nix) pkgs; - aliases = with scripts; - { - "cp-mov" = cp-media "mov" "movies"; - "cp-ser" = cp-media "ser" "shows"; - "cp-ani" = cp-media "ani" "anime"; - "p" = calc; - "s" = "systemctl"; - "j" = "journalctl"; - "ju" = "journalctl -u"; - "jfu" = "journalctl -fu"; - "ls" = "${pkgs.eza}/bin/eza --git"; - "ll" = "${pkgs.eza}/bin/eza --git"; - "lt" = "${pkgs.eza}/bin/eza --long --tree -L 3"; - "open" = "${pkgs.xdg-utils}/bin/xdg-open"; - "cb" = "${pkgs.wl-clipboard-rs}/wl-copy"; - - "pull" = "${pkgs.git}/bin/git pull"; - "push" = "${pkgs.git}/bin/git push"; - "commit" = "${pkgs.git}/bin/git commit"; - "add" = "${pkgs.git}/bin/git add"; - "patch" = "${pkgs.git}/bin/git add -p"; - "amend" = "${pkgs.git}/bin/git commit --amend"; - "log" = "${pkgs.git}/bin/git log --all --graph --decorate"; - "status" = "${pkgs.git}/bin/git status"; - "checkout" = "${pkgs.git}/bin/git checkout"; - "rebase" = "${pkgs.git}/bin/git rebase"; - "stash" = "${pkgs.git}/bin/git stash"; - }; - # extracting any compressed format - extract = '' - extract () { - if [ -f $1 ] ; then - case $1 in - *.tar.bz2) ${pkgs.gnutar}/bin/tar xjf $1 ;; - *.tar.zst) ${pkgs.gnutar}/bin/tar --zstd xf $1 ;; - *.tar.gz) ${pkgs.gnutar}/bin/tar xzf $1 ;; - *.bz2) bunzip2 $1 ;; - *.rar) unrar e $1 ;; - *.gz) gunzip $1 ;; - *.tar) ${pkgs.gnutar}/bin/tar xf $1 ;; - *.tbz2) ${pkgs.gnutar}/bin/tar xjf $1 ;; - *.tgz) ${pkgs.gnutar}/bin/tar xzf $1 ;; - *.zip) ${pkgs.unzip}/bin/unzip $1 ;; - *.Z) uncompress $1 ;; - *.7z) 7z x $1 ;; - *.tar.xz) ${pkgs.gnutar}/bin/tar xJf $1 ;; - *) echo "'$1' cannot be extracted via extract()" ;; - esac - else - echo "'$1' is not a valid file" - fi - } - ''; -in -{ - programs.zsh = { - enable = true; - enableCompletion = true; - syntaxHighlighting.enable = true; - dotDir = ".config/zsh"; - completionInit = '' - autoload -Uz compinit - if [[ -n ''${ZDOTDIR}/.zcompdump(#qN.mh+24) ]]; then - compinit; - else - compinit -C; - fi; - ''; - initExtra = '' - source "${pkgs.grml-zsh-config}/etc/zsh/zshrc" - export FZF_DEFAULT_COMMAND="${pkgs.ripgrep}/bin/rg --files --follow" - source "${pkgs.fzf}/share/fzf/key-bindings.zsh" - source "${pkgs.fzf}/share/fzf/completion.zsh" - eval "$(${pkgs.zoxide}/bin/zoxide init zsh)" - eval "$(${pkgs.atuin}/bin/atuin init zsh)" - eval "$(${pkgs.direnv}/bin/direnv hook zsh)" - function zvm_config() { - ZVM_READKEY_ENGINE=$ZVM_READKEY_ENGINE_NEX - ZVM_LINE_INIT_MODE=$ZVM_MODE_INSERT - ZVM_ESCAPE_KEYTIMEOUT=0.03 - } - - source ${pkgs.zsh-vi-mode}/share/zsh-vi-mode/zsh-vi-mode.plugin.zsh - - - ${extract} - - ${foldl' (a: b: a + "\n" + b) "" - (mapAttrsToList (name: value: ''alias ${name}="${value}"'') aliases)} - - function t() { - cd "$(${pkgs.custom.t}/bin/t-rs $@ | tail -n 1)" - } - - function temp() { - t $@ - } - - function rs() { - cd "$(${pkgs.custom.t}/bin/t-rs $@ | tail -n 1)" - cargo init . --bin --name $(basename "$PWD") - vim src/main.rs - } - - # path - path() { - export PATH="$1:$PATH" - } - - path "$HOME/.cargo/bin" - path "$HOME/.local/bin" - path "$HOME/Documents/scripts" - path "$HOME/.local/share/JetBrains/Toolbox/scripts" - - # http://bewatermyfriend.org/p/2013/001/ - # export NEWLINE=$'\n' - # zstyle ':prompt:grml:*:items:percent' pre "''${NEWLINE}" - - - ''; - }; -}