Compare commits

...

13 commits

Author SHA1 Message Date
ca98b8367c templates: add python-uv 2025-04-05 19:00:10 +01:00
62ddec5c23 templates: remove unused 'follows' 2025-04-05 18:57:18 +01:00
418494004b templates: use 'pre-commit.enabledPackages' 2025-04-05 18:57:18 +01:00
53569f17a6 treewide: pre-commit-hooks.nix renaming 2025-04-05 18:33:37 +01:00
d48d5c45e0 home: vim: remove 'friendly-snippets'
I never use them...
2025-04-04 19:06:19 +01:00
36aa641ec0 home: vim: rely on built-in diagnostic jump config
This reduces the surface area of my configuration.
2025-04-03 22:04:44 +01:00
2583cc6c12 home: vim: lua: lsp: add count to diagnostic maps 2025-04-03 22:04:44 +01:00
262dc48425 home: vim: use default 'diffopt:linematch'
It's now been defaulted to `linematch:40` on v0.11.
2025-04-03 22:04:44 +01:00
c1efc4316d home: vim: lualine: add custom 'oil' extension
I don't like the built-in one.
2025-04-03 22:04:44 +01:00
4ef1b08f4e home: vim: lualine: use built-in 'branch'
It now supports worktrees correctly (or at least I can't figure out
which issue I used to have with it...).

As a bonus, it also supports showing the correct branch for an `oil`
buffer.

This reverts commit 481d5f6f53.
2025-04-03 22:04:44 +01:00
274d143031 home: vim: fix deprecated calls 2025-04-03 22:04:44 +01:00
dfb3c353ec home: vim: remove 'lsp_lines'
It's been upstreamed!
2025-04-03 22:04:44 +01:00
37e88c2707 flake: bump inputs
And fix the small `jq` breakage.
2025-04-03 22:04:44 +01:00
23 changed files with 264 additions and 113 deletions

68
flake.lock generated
View file

@ -73,11 +73,11 @@
]
},
"locked": {
"lastModified": 1741352980,
"narHash": "sha256-+u2UunDA4Cl5Fci3m7S643HzKmIDAe+fiXrLqYsR2fs=",
"lastModified": 1743550720,
"narHash": "sha256-hIshGgKZCgWh6AYJpJmRgFdR3WUbkY04o82X05xqQiY=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "f4330d22f1c5d2ba72d3d22df5597d123fdb60a9",
"rev": "c621e8422220273271f52058f618c94e405bb0f5",
"type": "github"
},
"original": {
@ -108,10 +108,33 @@
"type": "github"
}
},
"git-hooks": {
"inputs": {
"flake-compat": "flake-compat",
"gitignore": "gitignore",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1742649964,
"narHash": "sha256-DwOTp7nvfi8mRfuL1escHDXabVXFGT1VlPD1JHrtrco=",
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "dcf5072734cb576d2b0c59b2ac44f5050b5eac82",
"type": "github"
},
"original": {
"owner": "cachix",
"ref": "master",
"repo": "git-hooks.nix",
"type": "github"
}
},
"gitignore": {
"inputs": {
"nixpkgs": [
"pre-commit-hooks",
"git-hooks",
"nixpkgs"
]
},
@ -136,11 +159,11 @@
]
},
"locked": {
"lastModified": 1742771635,
"narHash": "sha256-HQHzQPrg+g22tb3/K/4tgJjPzM+/5jbaujCZd8s2Mls=",
"lastModified": 1743607567,
"narHash": "sha256-kTzKPDFmNzwO1cK4fiJgPB/iSw7HgBAmknRTeAPJAeI=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "ad0614a1ec9cce3b13169e20ceb7e55dfaf2a818",
"rev": "49748c74cdbae03d70381f150b810f92617f23aa",
"type": "github"
},
"original": {
@ -152,11 +175,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1742669843,
"narHash": "sha256-G5n+FOXLXcRx+3hCJ6Rt6ZQyF1zqQ0DL0sWAMn2Nk0w=",
"lastModified": 1743448293,
"narHash": "sha256-bmEPmSjJakAp/JojZRrUvNcDX2R5/nuX6bm+seVaGhs=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "1e5b653dff12029333a6546c11e108ede13052eb",
"rev": "77b584d61ff80b4cef9245829a6f1dfad5afdfa3",
"type": "github"
},
"original": {
@ -191,38 +214,15 @@
"type": "github"
}
},
"pre-commit-hooks": {
"inputs": {
"flake-compat": "flake-compat",
"gitignore": "gitignore",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1742649964,
"narHash": "sha256-DwOTp7nvfi8mRfuL1escHDXabVXFGT1VlPD1JHrtrco=",
"owner": "cachix",
"repo": "pre-commit-hooks.nix",
"rev": "dcf5072734cb576d2b0c59b2ac44f5050b5eac82",
"type": "github"
},
"original": {
"owner": "cachix",
"ref": "master",
"repo": "pre-commit-hooks.nix",
"type": "github"
}
},
"root": {
"inputs": {
"agenix": "agenix",
"flake-parts": "flake-parts",
"futils": "futils",
"git-hooks": "git-hooks",
"home-manager": "home-manager",
"nixpkgs": "nixpkgs",
"nur": "nur",
"pre-commit-hooks": "pre-commit-hooks",
"systems": "systems"
}
},

View file

@ -61,10 +61,10 @@
};
};
pre-commit-hooks = {
git-hooks = {
type = "github";
owner = "cachix";
repo = "pre-commit-hooks.nix";
repo = "git-hooks.nix";
ref = "master";
inputs = {
nixpkgs.follows = "nixpkgs";

View file

@ -1,7 +1,7 @@
{ inputs, ... }:
{
imports = [
inputs.pre-commit-hooks.flakeModule
inputs.git-hooks.flakeModule
];
perSystem = { ... }: {

View file

@ -17,6 +17,7 @@ in
strings = "0;32";
arrays = "1;39";
objects = "1;39";
objectKeys = "1;34";
};
};
}

View file

@ -31,8 +31,6 @@ local keys = {
{ "[u", desc = "URL encode" },
{ "[x", desc = "XML encode" },
{ "[y", desc = "C string encode" },
-- Custom
{ "[d", lsp.goto_prev_diagnostic, desc = "Previous diagnostic" },
-- Next
{ "]", group = "Next" },
@ -62,8 +60,6 @@ local keys = {
{ "]u", desc = "URL decode" },
{ "]x", desc = "XML decode" },
{ "]y", desc = "C string decode" },
-- Custom
{ "]d", lsp.goto_next_diagnostic, desc = "Next diagnostic" },
-- Enable option
{ "[o", group = "Enable option" },

View file

@ -59,7 +59,6 @@ in
# LSP and linting
nvim-lspconfig # Easy LSP configuration
lsp-format-nvim # Simplified formatting configuration
lsp_lines-nvim # Show diagnostics *over* regions
none-ls-nvim # LSP integration for linters and formatters
nvim-treesitter.withAllGrammars # Better highlighting
nvim-treesitter-textobjects # More textobjects
@ -67,7 +66,6 @@ in
# Completion
luasnip # Snippet manager compatible with LSP
friendly-snippets # LSP snippets collection
nvim-cmp # Completion engine
cmp-async-path # More responsive path completion
cmp-buffer # Words from open buffers

View file

@ -68,8 +68,6 @@ set listchars=tab:>─,trail:·,nbsp:¤
" Use patience diff
set diffopt+=algorithm:patience
" Align similar lines in each hunk
set diffopt+=linematch:50
" Don't redraw when executing macros
set lazyredraw

View file

@ -3,43 +3,6 @@ local M = {}
-- Simplified LSP formatting configuration
local lsp_format = require("lsp-format")
--- Move to the next/previous diagnostic, automatically showing the diagnostics
--- float if necessary.
--- @param forward bool whether to go forward or backwards
local function goto_diagnostic(forward)
vim.validate({
forward = { forward, "boolean" },
})
local opts = {
float = false,
}
-- Only show floating diagnostics if they are otherwise not displayed
local config = vim.diagnostic.config()
if not (config.virtual_text or config.virtual_lines) then
opts.float = true
end
if forward then
vim.diagnostic.goto_next(opts)
else
vim.diagnostic.goto_prev(opts)
end
end
--- Move to the next diagnostic, automatically showing the diagnostics float if
--- necessary.
M.goto_next_diagnostic = function()
goto_diagnostic(true)
end
--- Move to the previous diagnostic, automatically showing the diagnostics float
--- if necessary.
M.goto_prev_diagnostic = function()
goto_diagnostic(false)
end
--- shared LSP configuration callback
--- @param client native client configuration
--- @param bufnr int? buffer number of the attached client
@ -79,6 +42,10 @@ M.on_attach = function(client, bufnr)
vim.diagnostic.config({
virtual_text = text,
virtual_lines = lines,
jump = {
-- Show float on jump if no diagnostic text is otherwise shown
float = not (text or lines),
},
})
end

View file

@ -38,7 +38,7 @@ end
--- @param bufnr int? buffer number
--- @return table all active LSP client names
M.list_lsp_clients = function(bufnr)
local clients = vim.lsp.get_active_clients({ bufnr = bufnr })
local clients = vim.lsp.get_clients({ bufnr = bufnr })
local names = {}
for _, client in ipairs(clients) do

View file

@ -1,3 +0,0 @@
local lsp_lines = require("lsp_lines")
lsp_lines.setup()

View file

@ -16,6 +16,10 @@ vim.diagnostic.config({
update_in_insert = false,
-- Show highest severity first
severity_sort = true,
jump = {
-- Show float on diagnostic jumps
float = true,
},
})
-- Inform servers we are able to do completion, snippets, etc...

View file

@ -1,4 +1,5 @@
local lualine = require("lualine")
local oil = require("oil")
local utils = require("ambroisie.utils")
local function list_spell_languages()
@ -30,7 +31,7 @@ lualine.setup({
{ "mode" },
},
lualine_b = {
{ "FugitiveHead" },
{ "branch" },
{ "filename", symbols = { readonly = "🔒" } },
},
lualine_c = {
@ -57,5 +58,21 @@ lualine.setup({
extensions = {
"fugitive",
"quickfix",
{
sections = {
lualine_a = {
{ "mode" },
},
lualine_b = {
{ "branch" },
},
lualine_c = {
function()
return vim.fn.fnamemodify(oil.get_current_dir(), ":~")
end,
},
},
filetypes = { "oil" },
},
},
})

View file

@ -1 +0,0 @@
require("luasnip.loaders.from_vscode").lazy_load()

View file

@ -16,19 +16,18 @@
ref = "nixos-unstable";
};
pre-commit-hooks = {
git-hooks = {
type = "github";
owner = "cachix";
repo = "pre-commit-hooks.nix";
repo = "git-hooks.nix";
ref = "master";
inputs = {
flake-utils.follows = "futils";
nixpkgs.follows = "nixpkgs";
};
};
};
outputs = { self, futils, nixpkgs, pre-commit-hooks }:
outputs = { self, futils, nixpkgs, git-hooks }:
{
overlays = {
default = final: _prev: {
@ -69,7 +68,7 @@
];
};
pre-commit = pre-commit-hooks.lib.${system}.run {
pre-commit = git-hooks.lib.${system}.run {
src = self;
hooks = {
@ -92,12 +91,12 @@
devShells = {
default = pkgs.mkShell {
inputsFrom = with self.packages.${system}; [
project
inputsFrom = [
self.packages.${system}.project
];
packages = with pkgs; [
clang-tools
self.checks.${system}.pre-commit.enabledPackages
];
inherit (pre-commit) shellHook;

View file

@ -16,19 +16,18 @@
ref = "nixos-unstable";
};
pre-commit-hooks = {
git-hooks = {
type = "github";
owner = "cachix";
repo = "pre-commit-hooks.nix";
repo = "git-hooks.nix";
ref = "master";
inputs = {
flake-utils.follows = "futils";
nixpkgs.follows = "nixpkgs";
};
};
};
outputs = { self, futils, nixpkgs, pre-commit-hooks }:
outputs = { self, futils, nixpkgs, git-hooks }:
{
overlays = {
default = final: _prev: {
@ -69,7 +68,7 @@
];
};
pre-commit = pre-commit-hooks.lib.${system}.run {
pre-commit = git-hooks.lib.${system}.run {
src = self;
hooks = {
@ -92,12 +91,12 @@
devShells = {
default = pkgs.mkShell {
inputsFrom = with self.packages.${system}; [
project
inputsFrom = [
self.packages.${system}.project
];
packages = with pkgs; [
clang-tools
self.checks.${system}.pre-commit.enabledPackages
];
inherit (pre-commit) shellHook;

View file

@ -7,6 +7,10 @@
path = ./c++-meson;
description = "A C++ project using Meson";
};
"python-uv" = {
path = ./python-uv;
description = "A Python project using uv";
};
"rust-cargo" = {
path = ./rust-cargo;
description = "A Rust project using Cargo";

View file

@ -0,0 +1,6 @@
# shellcheck shell=bash
if ! has nix_direnv_version || ! nix_direnv_version 3.0.0; then
source_url "https://raw.githubusercontent.com/nix-community/nix-direnv/3.0.0/direnvrc" "sha256-21TMnI2xWX7HkSTjFFri2UaohXVj854mgvWapWrxRXg="
fi
use flake

6
templates/python-uv/.gitignore vendored Normal file
View file

@ -0,0 +1,6 @@
# Virtual environments
.venv
# Nix generated files
/.pre-commit-config.yaml
/result

View file

@ -0,0 +1,31 @@
labels:
backend: local
steps:
- name: pre-commit check
image: bash
commands:
- nix develop --command pre-commit run --all
- name: nix flake check
image: bash
commands:
- nix flake check
- name: notify
image: bash
environment:
ADDRESS:
from_secret: matrix_homeserver
ROOM:
from_secret: matrix_roomid
USER:
from_secret: matrix_username
PASS:
from_secret: matrix_password
commands:
- nix run github:ambroisie/matrix-notifier
when:
status:
- failure
- success

View file

@ -0,0 +1,112 @@
{
description = "A Python project";
inputs = {
futils = {
type = "github";
owner = "numtide";
repo = "flake-utils";
ref = "main";
};
nixpkgs = {
type = "github";
owner = "NixOS";
repo = "nixpkgs";
ref = "nixos-unstable";
};
git-hooks = {
type = "github";
owner = "cachix";
repo = "git-hooks.nix";
ref = "master";
inputs = {
nixpkgs.follows = "nixpkgs";
};
};
};
outputs = { self, futils, nixpkgs, git-hooks }:
{
overlays = {
default = final: _prev: {
project = with final; python3.pkgs.buildPythonApplication {
pname = "project";
version = (final.lib.importTOML ./pyproject.toml).project.version;
pyproject = true;
src = self;
build-system = with python3.pkgs; [ setuptools ];
pythonImportsCheck = [ "project" ];
meta = with lib; {
description = "A Python project";
homepage = "https://git.belanyi.fr/ambroisie/project";
license = licenses.mit;
maintainers = with maintainers; [ ambroisie ];
};
};
};
};
} // futils.lib.eachDefaultSystem (system:
let
pkgs = import nixpkgs {
inherit system;
overlays = [
self.overlays.default
];
};
pre-commit = git-hooks.lib.${system}.run {
src = self;
hooks = {
mypy = {
enable = true;
};
nixpkgs-fmt = {
enable = true;
};
ruff = {
enable = true;
};
ruff-format = {
enable = true;
};
};
};
in
{
checks = {
inherit (self.packages.${system}) project;
inherit pre-commit;
};
devShells = {
default = pkgs.mkShell {
inputsFrom = [
self.packages.${system}.project
];
packages = with pkgs; [
uv
self.checks.${system}.pre-commit.enabledPackages
];
inherit (pre-commit) shellHook;
};
};
packages = futils.lib.flattenTree {
default = pkgs.project;
inherit (pkgs) project;
};
});
}

View file

@ -0,0 +1,17 @@
[build-system]
requires = ["setuptools"]
build-backend = "setuptools.build_meta"
[project]
name = "project"
version = "0.0.0"
description = "project description"
requires-python = ">=3.12"
dependencies = []
[project.scripts]
project = "project:main"
[dependency-groups]
dev = []

View file

@ -0,0 +1,2 @@
def main() -> None:
print("Hello, world!")

View file

@ -16,19 +16,18 @@
ref = "nixos-unstable";
};
pre-commit-hooks = {
git-hooks = {
type = "github";
owner = "cachix";
repo = "pre-commit-hooks.nix";
repo = "git-hooks.nix";
ref = "master";
inputs = {
flake-utils.follows = "futils";
nixpkgs.follows = "nixpkgs";
};
};
};
outputs = { self, futils, nixpkgs, pre-commit-hooks }:
outputs = { self, futils, nixpkgs, git-hooks }:
{
overlays = {
default = final: _prev: {
@ -60,7 +59,7 @@
];
};
pre-commit = pre-commit-hooks.lib.${system}.run {
pre-commit = git-hooks.lib.${system}.run {
src = self;
hooks = {
@ -88,14 +87,13 @@
devShells = {
default = pkgs.mkShell {
inputsFrom = with self.packages.${system}; [
project
inputsFrom = [
self.packages.${system}.project
];
packages = with pkgs; [
clippy
rust-analyzer
rustfmt
self.checks.${system}.pre-commit.enabledPackages
];
RUST_SRC_PATH = "${pkgs.rust.packages.stable.rustPlatform.rustLibSrc}";