diff --git a/dev-shell.nix b/dev-shell.nix index d23c062..75d6b23 100644 --- a/dev-shell.nix +++ b/dev-shell.nix @@ -12,6 +12,7 @@ buildInputs = [ # shell scripts (lib.shellAsDrv {script = ''echo "hello world"''; pname = "hello";}) + (lib.shellAsDrv {script = builtins.readFile ./scripts/hm-switch.sh; pname = "hm-switch";}) ]; # env vars diff --git a/flake.lock b/flake.lock index 6b10ce5..9c183ed 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1665870395, - "narHash": "sha256-Tsbqb27LDNxOoPLh0gw2hIb6L/6Ow/6lIBvqcHzEKBI=", + "lastModified": 1673301561, + "narHash": "sha256-gRUWHbBAtMuPDJQXotoI8u6+3DGBIUZHkyQWpIv7WpM=", "owner": "ryantm", "repo": "agenix", - "rev": "a630400067c6d03c9b3e0455347dc8559db14288", + "rev": "42d371d861a227149dc9a7e03350c9ab8b8ddd68", "type": "github" }, "original": { @@ -36,6 +36,22 @@ "type": "github" } }, + "flake-compat_2": { + "flake": false, + "locked": { + "lastModified": 1668681692, + "narHash": "sha256-Ht91NGdewz8IQLtWZ9LCeNXMSXHUss+9COoqu6JLmXU=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "009399224d5e398d03b22badca40a37ac85412a1", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, "flake-utils": { "locked": { "lastModified": 1667395993, @@ -53,11 +69,11 @@ }, "flake-utils_2": { "locked": { - "lastModified": 1659877975, - "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", + "lastModified": 1667395993, + "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", "owner": "numtide", "repo": "flake-utils", - "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", + "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", "type": "github" }, "original": { @@ -81,6 +97,21 @@ "type": "github" } }, + "flake-utils_4": { + "locked": { + "lastModified": 1659877975, + "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, "home-manager": { "inputs": { "nixpkgs": [ @@ -89,11 +120,11 @@ "utils": "utils" }, "locked": { - "lastModified": 1672770368, - "narHash": "sha256-iO6Z9blIe8dcPh3VT2nkej9EimORCoskGQR6xNjICWI=", + "lastModified": 1673343300, + "narHash": "sha256-5Xdj6kpXYMie0MlnGwqK5FaMdsedxvyuakWtyKB3zaQ=", "owner": "nix-community", "repo": "home-manager", - "rev": "d01e7280ad7d13a5a0fae57355bd0dbfe5b81969", + "rev": "176e455371a8371586e8a3ff0d56ee9f3ca2324e", "type": "github" }, "original": { @@ -118,11 +149,55 @@ "type": "github" } }, - "nixgl": { + "neovim-flake": { "inputs": { "flake-utils": "flake-utils_2", + "nixpkgs": [ + "neovim-nightly-overlay", + "nixpkgs" + ] + }, + "locked": { + "dir": "contrib", + "lastModified": 1673321445, + "narHash": "sha256-5jdmIgcN2PNWHozyj8WRoSVJBiQi61SqWGfTJXUBDOI=", + "owner": "neovim", + "repo": "neovim", + "rev": "1df2db0bc4dfa2e4f632f9b3dbae00b8b29f2d9f", + "type": "github" + }, + "original": { + "dir": "contrib", + "owner": "neovim", + "repo": "neovim", + "type": "github" + } + }, + "neovim-nightly-overlay": { + "inputs": { + "flake-compat": "flake-compat_2", + "neovim-flake": "neovim-flake", "nixpkgs": "nixpkgs" }, + "locked": { + "lastModified": 1673338492, + "narHash": "sha256-UbqugOENjdtTWCvJQQ0ym80zTB28esvJQPO3j3+Zmjw=", + "owner": "nix-community", + "repo": "neovim-nightly-overlay", + "rev": "de5bef64b8158b85b47256d5a366973534130621", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "neovim-nightly-overlay", + "type": "github" + } + }, + "nixgl": { + "inputs": { + "flake-utils": "flake-utils_3", + "nixpkgs": "nixpkgs_2" + }, "locked": { "lastModified": 1, "narHash": "sha256-KP+2qdZlhmRkrafuuEofg7YnNdVmGV95ipvpuqmJneI=", @@ -135,6 +210,22 @@ } }, "nixpkgs": { + "locked": { + "lastModified": 1673301451, + "narHash": "sha256-0IvOqAXZ+dHjOV7dQl4iEcCUmzqg8VvGg+UZ68ONDIg=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "35f1f865c03671a4f75a6996000f03ac3dc3e472", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { "locked": { "lastModified": 1660551188, "narHash": "sha256-a1LARMMYQ8DPx1BgoI/UN4bXe12hhZkCNqdxNi6uS0g=", @@ -149,13 +240,13 @@ "type": "github" } }, - "nixpkgs_2": { + "nixpkgs_3": { "locked": { - "lastModified": 1672617983, - "narHash": "sha256-68WDiCBs631mbDDk4UAKdGURKcsfW6hjb7wgudTAe5o=", + "lastModified": 1673226411, + "narHash": "sha256-b6cGb5Ln7Zy80YO66+cbTyGdjZKtkoqB/iIIhDX9gRA=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "0fc9fca9c8d43edd79d33fea0dd8409d7c4580f4", + "rev": "aa1d74709f5dac623adb4d48fdfb27cc2c92a4d4", "type": "github" }, "original": { @@ -164,7 +255,7 @@ "type": "indirect" } }, - "nixpkgs_3": { + "nixpkgs_4": { "locked": { "lastModified": 1665296151, "narHash": "sha256-uOB0oxqxN9K7XGF1hcnY+PQnlQJ+3bP2vCn/+Ru/bbc=", @@ -187,22 +278,23 @@ "flake-utils": "flake-utils", "home-manager": "home-manager", "kpcli-py": "kpcli-py", + "neovim-nightly-overlay": "neovim-nightly-overlay", "nixgl": "nixgl", - "nixpkgs": "nixpkgs_2", + "nixpkgs": "nixpkgs_3", "rust-overlay": "rust-overlay" } }, "rust-overlay": { "inputs": { - "flake-utils": "flake-utils_3", - "nixpkgs": "nixpkgs_3" + "flake-utils": "flake-utils_4", + "nixpkgs": "nixpkgs_4" }, "locked": { - "lastModified": 1672712534, - "narHash": "sha256-8S0DdMPcbITnlOu0uA81mTo3hgX84wK8S9wS34HEFY4=", + "lastModified": 1673317790, + "narHash": "sha256-GWjj/bqTXPsKgwWGFZUyHRShxFvufShYnuyyeP99wmk=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "69fb7bf0a8c40e6c4c197fa1816773774c8ac59f", + "rev": "9724998ea2caf23214674bf0c2cdf6ec0b1719af", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index efd1cd2..d6369e4 100644 --- a/flake.nix +++ b/flake.nix @@ -22,10 +22,12 @@ url = "github:rebkwok/kpcli"; flake = false; }; + neovim-nightly-overlay.url = "github:nix-community/neovim-nightly-overlay"; }; outputs = { - nixpkgs, agenix, home-manager, flake-utils, nixgl, rust-overlay, flake-compat + nixpkgs, agenix, home-manager, flake-utils, nixgl, rust-overlay, flake-compat, + neovim-nightly-overlay ,... }@_inputs: let # Context/global stuffs to be passed down diff --git a/native_configs/neovim/init.lua b/native_configs/neovim/init.lua index 8e4fea7..b29fbdd 100644 --- a/native_configs/neovim/init.lua +++ b/native_configs/neovim/init.lua @@ -20,19 +20,37 @@ if empty(glob(plug_path)) endif ]]) +local function truthy(v) return v ~= nil end + +local function cfg(cfg_var, do_fn) if truthy(cfg_var) then do_fn() end end + +local function cfg_render(do_fn) + local should_render = not truthy(os.getenv("NVIM_HEADLESS")) + cfg(should_render, do_fn) +end + -- vim-plug local Plug = vim.fn['plug#'] vim.call('plug#begin') -- libs and dependencies -Plug('nvim-lua/plenary.nvim') +Plug('nvim-lua/plenary.nvim') -- The base of all plugins -- plugins Plug('tjdevries/nlua.nvim') -- adds symbols of vim stuffs in init.lua Plug('nvim-treesitter/nvim-treesitter') -- language parser engine for highlighting Plug('nvim-treesitter/nvim-treesitter-textobjects') -- more text objects Plug('nvim-telescope/telescope.nvim', { branch = '0.1.x' }) -- file browser +-- TODO: this might need to be taken extra care in our Nix config +-- What this Plug declaration means is this repo needs to be built on our running environment +-- ----- +-- What to do: +-- - Run `make` at anytime before Nix is done on this repository +-- - Might mean that we fetch this repository, run make, and copy to destination folder +-- - Make sure that if we run `make` at first Plug run, that `make` is idempotent +-- OR +-- Make sure that Plug does not run `make` and use the output it needs Plug('nvim-telescope/telescope-fzf-native.nvim', { ['do'] = 'make >> /tmp/log 2>&1' }) Plug('nvim-telescope/telescope-file-browser.nvim') @@ -67,15 +85,17 @@ Plug('Olical/conjure') -- REPL on the source for Clojure (and other LISPs) Plug('gennaro-tedesco/nvim-jqx') -- JSON formatter (use :Jqx*) Plug('kylechui/nvim-surround') -- surrounds with tags/parenthesis Plug('simrat39/rust-tools.nvim') -- config rust-analyzer and nvim integration -Plug('simrat39/inlay-hints.nvim') -- type-hints with pseudo-virtual texts -- UI & colorscheme -Plug('gruvbox-community/gruvbox') -- theme provider -Plug('nvim-lualine/lualine.nvim') -- fancy status line -Plug('lukas-reineke/indent-blankline.nvim') -- identation lines on blank lines -Plug('kyazdani42/nvim-web-devicons') -- icons for folder and filetypes -Plug('m-demare/hlargs.nvim') -- highlights arguments; great for func prog -Plug('folke/todo-comments.nvim') -- Highlights TODO +cfg_render(function() + Plug('simrat39/inlay-hints.nvim') -- type-hints with pseudo-virtual texts + Plug('gruvbox-community/gruvbox') -- theme provider + Plug('nvim-lualine/lualine.nvim') -- fancy status line + Plug('lukas-reineke/indent-blankline.nvim') -- identation lines on blank lines + Plug('kyazdani42/nvim-web-devicons') -- icons for folder and filetypes + Plug('m-demare/hlargs.nvim') -- highlights arguments; great for func prog + Plug('folke/todo-comments.nvim') -- Highlights TODO +end) -- other utilities Plug('nvim-treesitter/nvim-treesitter', { run = ':TSUpdate' }) @@ -84,6 +104,11 @@ Plug('nvim-treesitter/playground') -- Sees Treesitter AST - less hair pulling, m Plug('saadparwaiz1/cmp_luasnip') -- snippet engine Plug('L3MON4D3/LuaSnip') -- snippet engine Plug('mickael-menu/zk-nvim') -- Zettelkasten +-- Switch cases: +-- `gsp` -> PascalCase (classes), `gsc` -> camelCase (Java), `gs_` -> snake_case (C/C++/Rust) +-- `gsu` -> UPPER_CASE (CONSTs), `gsk` -> kebab-case (Clojure), `gsK` -> Title-Kebab-Case +-- `gs.` -> dot.case (R) +Plug('arthurxavierx/vim-caser') -- switch cases --------- vim.call('plug#end') @@ -95,12 +120,13 @@ endif ]]) -- special terminals, place them at 4..=7 for ergonomics -vim.api.nvim_create_autocmd({"VimEnter"}, { +vim.api.nvim_create_autocmd({ "VimEnter" }, { callback = function() local function named_term(term_idx, term_name) require('harpoon.term').gotoTerminal(term_idx) - vim.cmd([[:exe ":file ]]..term_name..[[" | :bfirst]]) + vim.cmd([[:exe ":file ]] .. term_name .. [[" | :bfirst]]) end + -- term:ctl at 4 named_term(4, "term:ctl") -- term:dev at 5 @@ -154,7 +180,7 @@ vim.keymap.set({ 'n', 'v' }, '', '', { silent = true }) -- that does not collide with vi-motion keybind. This is because -- -> ^[x; while on the terminal is ^[ vim.keymap.set('t', '', ')') -vim.keymap.set({ 'n', 'i', 'v' }, '', 'mode', {desc = ""}) -- redraw on every mode +vim.keymap.set({ 'n', 'i', 'v' }, '', 'mode', { desc = "" }) -- redraw on every mode -- diagnostics (errors/warnings to be shown) vim.keymap.set('n', '[d', vim.diagnostic.goto_prev) diff --git a/nix-conf/home-manager/flake.lock b/nix-conf/home-manager/flake.lock index 16cae97..0f98375 100644 --- a/nix-conf/home-manager/flake.lock +++ b/nix-conf/home-manager/flake.lock @@ -16,6 +16,22 @@ "type": "github" } }, + "flake-compat_2": { + "flake": false, + "locked": { + "lastModified": 1668681692, + "narHash": "sha256-Ht91NGdewz8IQLtWZ9LCeNXMSXHUss+9COoqu6JLmXU=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "009399224d5e398d03b22badca40a37ac85412a1", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, "flake-utils": { "locked": { "lastModified": 1667395993, @@ -33,11 +49,11 @@ }, "flake-utils_2": { "locked": { - "lastModified": 1659877975, - "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", + "lastModified": 1667395993, + "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", "owner": "numtide", "repo": "flake-utils", - "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", + "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", "type": "github" }, "original": { @@ -61,6 +77,21 @@ "type": "github" } }, + "flake-utils_4": { + "locked": { + "lastModified": 1659877975, + "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, "home-manager": { "inputs": { "nixpkgs": [ @@ -69,11 +100,11 @@ "utils": "utils" }, "locked": { - "lastModified": 1672770368, - "narHash": "sha256-iO6Z9blIe8dcPh3VT2nkej9EimORCoskGQR6xNjICWI=", + "lastModified": 1673343300, + "narHash": "sha256-5Xdj6kpXYMie0MlnGwqK5FaMdsedxvyuakWtyKB3zaQ=", "owner": "nix-community", "repo": "home-manager", - "rev": "d01e7280ad7d13a5a0fae57355bd0dbfe5b81969", + "rev": "176e455371a8371586e8a3ff0d56ee9f3ca2324e", "type": "github" }, "original": { @@ -98,11 +129,55 @@ "type": "github" } }, - "nixgl": { + "neovim-flake": { "inputs": { "flake-utils": "flake-utils_2", + "nixpkgs": [ + "neovim-nightly-overlay", + "nixpkgs" + ] + }, + "locked": { + "dir": "contrib", + "lastModified": 1673321445, + "narHash": "sha256-5jdmIgcN2PNWHozyj8WRoSVJBiQi61SqWGfTJXUBDOI=", + "owner": "neovim", + "repo": "neovim", + "rev": "1df2db0bc4dfa2e4f632f9b3dbae00b8b29f2d9f", + "type": "github" + }, + "original": { + "dir": "contrib", + "owner": "neovim", + "repo": "neovim", + "type": "github" + } + }, + "neovim-nightly-overlay": { + "inputs": { + "flake-compat": "flake-compat_2", + "neovim-flake": "neovim-flake", "nixpkgs": "nixpkgs" }, + "locked": { + "lastModified": 1673338492, + "narHash": "sha256-UbqugOENjdtTWCvJQQ0ym80zTB28esvJQPO3j3+Zmjw=", + "owner": "nix-community", + "repo": "neovim-nightly-overlay", + "rev": "de5bef64b8158b85b47256d5a366973534130621", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "neovim-nightly-overlay", + "type": "github" + } + }, + "nixgl": { + "inputs": { + "flake-utils": "flake-utils_3", + "nixpkgs": "nixpkgs_2" + }, "locked": { "lastModified": 1, "narHash": "sha256-KP+2qdZlhmRkrafuuEofg7YnNdVmGV95ipvpuqmJneI=", @@ -115,6 +190,22 @@ } }, "nixpkgs": { + "locked": { + "lastModified": 1673301451, + "narHash": "sha256-0IvOqAXZ+dHjOV7dQl4iEcCUmzqg8VvGg+UZ68ONDIg=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "35f1f865c03671a4f75a6996000f03ac3dc3e472", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { "locked": { "lastModified": 1660551188, "narHash": "sha256-a1LARMMYQ8DPx1BgoI/UN4bXe12hhZkCNqdxNi6uS0g=", @@ -129,13 +220,13 @@ "type": "github" } }, - "nixpkgs_2": { + "nixpkgs_3": { "locked": { - "lastModified": 1672617983, - "narHash": "sha256-68WDiCBs631mbDDk4UAKdGURKcsfW6hjb7wgudTAe5o=", + "lastModified": 1673226411, + "narHash": "sha256-b6cGb5Ln7Zy80YO66+cbTyGdjZKtkoqB/iIIhDX9gRA=", "owner": "nixos", "repo": "nixpkgs", - "rev": "0fc9fca9c8d43edd79d33fea0dd8409d7c4580f4", + "rev": "aa1d74709f5dac623adb4d48fdfb27cc2c92a4d4", "type": "github" }, "original": { @@ -145,7 +236,7 @@ "type": "github" } }, - "nixpkgs_3": { + "nixpkgs_4": { "locked": { "lastModified": 1665296151, "narHash": "sha256-uOB0oxqxN9K7XGF1hcnY+PQnlQJ+3bP2vCn/+Ru/bbc=", @@ -167,22 +258,23 @@ "flake-utils": "flake-utils", "home-manager": "home-manager", "kpcli-py": "kpcli-py", + "neovim-nightly-overlay": "neovim-nightly-overlay", "nixgl": "nixgl", - "nixpkgs": "nixpkgs_2", + "nixpkgs": "nixpkgs_3", "rust-overlay": "rust-overlay" } }, "rust-overlay": { "inputs": { - "flake-utils": "flake-utils_3", - "nixpkgs": "nixpkgs_3" + "flake-utils": "flake-utils_4", + "nixpkgs": "nixpkgs_4" }, "locked": { - "lastModified": 1672712534, - "narHash": "sha256-8S0DdMPcbITnlOu0uA81mTo3hgX84wK8S9wS34HEFY4=", + "lastModified": 1673317790, + "narHash": "sha256-GWjj/bqTXPsKgwWGFZUyHRShxFvufShYnuyyeP99wmk=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "69fb7bf0a8c40e6c4c197fa1816773774c8ac59f", + "rev": "9724998ea2caf23214674bf0c2cdf6ec0b1719af", "type": "github" }, "original": { diff --git a/nix-conf/home-manager/flake.nix b/nix-conf/home-manager/flake.nix index 2eb9188..ee4b810 100644 --- a/nix-conf/home-manager/flake.nix +++ b/nix-conf/home-manager/flake.nix @@ -18,6 +18,7 @@ url = "github:rebkwok/kpcli"; flake = false; }; + neovim-nightly-overlay.url = "github:nix-community/neovim-nightly-overlay"; }; outputs = @@ -27,6 +28,7 @@ , rust-overlay , flake-utils , kpcli-py + , neovim-nightly-overlay , ... }: let diff --git a/overlays.nix b/overlays.nix index e29673f..1aec3ac 100644 --- a/overlays.nix +++ b/overlays.nix @@ -1,9 +1,11 @@ -flake_input@{ kpcli-py, nixgl, rust-overlay, ... }: [ +flake_input@{ kpcli-py, nixgl, rust-overlay, neovim-nightly-overlay, ... }: [ nixgl.overlays.default rust-overlay.overlays.default + neovim-nightly-overlay.overlay + (final: prev: { # use python3.9, which works because of cython somehow? kpcli-py = final.poetry2nix.mkPoetryApplication { diff --git a/templates/rust/flake.nix b/templates/rust/flake.nix index e5f373e..a75001f 100644 --- a/templates/rust/flake.nix +++ b/templates/rust/flake.nix @@ -11,22 +11,28 @@ let overlays = [ rust-overlay.overlays.default ]; pkgs = import nixpkgs { inherit system overlays; }; + rust_pkgs = (pkgs.rust-bin.selectLatestNightlyWith + ( + toolchain: + toolchain.default.override { + extensions = [ "rust-src" "rust-analyzer" "rust-docs" "clippy" "miri" ]; + } + )); naersk-lib = pkgs.callPackage naersk { }; in { defaultPackage = naersk-lib.buildPackage ./.; devShell = with pkgs; mkShell { buildInputs = [ - (pkgs.rust-bin.selectLatestNightlyWith - ( - toolchain: - toolchain.default.override { - extensions = [ "rust-src" ]; - } - )) - pkgs.rust-analyzer + rust_pkgs + # rust's compiler is quite powerful enough to the point where + # a REPL is not really necessary. + # Rely on the compiler and bacon 99% of the time + # only use REPL if you need to explore/prototype + # In that case, might as well put the code into sandbox + pkgs.evcxr + pkgs.bacon ]; - RUST_SRC_PATH = rustPlatform.rustLibSrc; shellHook = '' # nix flake update # is this even needed? '';