Use flake-parts for managing languages
This commit is contained in:
parent
0fffeb6e55
commit
9e4bc003cb
118 changed files with 494 additions and 383 deletions
4
.envrc
4
.envrc
|
@ -1,3 +1,3 @@
|
||||||
watch_file ./languages
|
watch_dir ./languages
|
||||||
watch_file ./.vale/styles
|
watch_dir ./modules
|
||||||
use flake
|
use flake
|
||||||
|
|
|
@ -10,7 +10,8 @@ for this Flake.
|
||||||
## ⭐ Features
|
## ⭐ Features
|
||||||
|
|
||||||
- 🏠 **`home-manager`**: Defines the user environment.
|
- 🏠 **`home-manager`**: Defines the user environment.
|
||||||
- 🧩 **`flake-parts`**: Makes the Flake modular and reusable.
|
- 🧩 **`flake-parts`**: Makes the Flake modular and reusable, enabling clean
|
||||||
|
separation of components.
|
||||||
- 🔐 **`sops`**: Encrypts secrets.
|
- 🔐 **`sops`**: Encrypts secrets.
|
||||||
- ✨ **`treefmt`** (with Helix integration): Automatically formats the code in
|
- ✨ **`treefmt`** (with Helix integration): Automatically formats the code in
|
||||||
this repository when modifying it, with features to check the flake for
|
this repository when modifying it, with features to check the flake for
|
||||||
|
|
153
flake.nix
153
flake.nix
|
@ -39,10 +39,9 @@
|
||||||
{
|
{
|
||||||
systems = [ "aarch64-linux" ];
|
systems = [ "aarch64-linux" ];
|
||||||
imports = [
|
imports = [
|
||||||
inputs.devshell.flakeModule
|
|
||||||
inputs.git-hooks-nix.flakeModule
|
|
||||||
inputs.home-manager.flakeModules.home-manager
|
inputs.home-manager.flakeModules.home-manager
|
||||||
inputs.treefmt-nix.flakeModule
|
./modules
|
||||||
|
./languages
|
||||||
];
|
];
|
||||||
flake = {
|
flake = {
|
||||||
# https://nix-community.github.io/home-manager/options.xhtml
|
# https://nix-community.github.io/home-manager/options.xhtml
|
||||||
|
@ -53,37 +52,20 @@
|
||||||
inherit pkgs;
|
inherit pkgs;
|
||||||
extraSpecialArgs = { inherit inputs pkgs; };
|
extraSpecialArgs = { inherit inputs pkgs; };
|
||||||
modules = [
|
modules = [
|
||||||
./home/home.nix
|
{ nixpkgs.overlays = [ inputs.nur.overlays.default ]; }
|
||||||
inputs.stylix.homeModules.stylix
|
|
||||||
inputs.catppuccin.homeModules.catppuccin
|
|
||||||
inputs.lix-module.nixosModules.default
|
inputs.lix-module.nixosModules.default
|
||||||
inputs.sops-nix.homeManagerModules.sops
|
inputs.sops-nix.homeManagerModules.sops
|
||||||
{ nixpkgs.overlays = [ inputs.nur.overlays.default ]; }
|
inputs.stylix.homeModules.stylix
|
||||||
|
inputs.catppuccin.homeModules.catppuccin
|
||||||
|
./home/home.nix
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
perSystem =
|
perSystem =
|
||||||
{ system, config, ... }:
|
{ system, ... }:
|
||||||
let
|
let
|
||||||
deepMerge =
|
|
||||||
lhs: rhs:
|
|
||||||
lhs
|
|
||||||
// rhs
|
|
||||||
// (builtins.mapAttrs (
|
|
||||||
rName: rValue:
|
|
||||||
let
|
|
||||||
lValue = lhs.${rName} or null;
|
|
||||||
in
|
|
||||||
if builtins.isAttrs lValue && builtins.isAttrs rValue then
|
|
||||||
deepMerge lValue rValue
|
|
||||||
else if builtins.isList lValue && builtins.isList rValue then
|
|
||||||
lValue ++ rValue
|
|
||||||
else
|
|
||||||
rValue
|
|
||||||
) rhs);
|
|
||||||
tomlFormatter = pkgs.formats.toml { };
|
|
||||||
pkgs = import inputs.nixpkgs {
|
pkgs = import inputs.nixpkgs {
|
||||||
inherit system;
|
inherit system;
|
||||||
overlays = [
|
overlays = [
|
||||||
|
@ -91,43 +73,6 @@
|
||||||
inputs.nixgl.overlays.default
|
inputs.nixgl.overlays.default
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
treefmt = config.treefmt.build.wrapper;
|
|
||||||
langDir = ./languages;
|
|
||||||
langFiles = builtins.attrNames (builtins.readDir langDir);
|
|
||||||
nixFiles = builtins.filter (name: builtins.match ".*\\.nix" name != null) langFiles;
|
|
||||||
configs = map (file: import (langDir + "/${file}") { inherit pkgs treefmt; }) nixFiles;
|
|
||||||
helixLanguages = {
|
|
||||||
directory = ".helix";
|
|
||||||
filename = "languages.toml";
|
|
||||||
content = {
|
|
||||||
language = map (cfg: cfg.helix.language) (
|
|
||||||
(builtins.filter (cfg: builtins.hasAttr "language" cfg.helix) (
|
|
||||||
builtins.filter (cfg: builtins.hasAttr "helix" cfg) configs
|
|
||||||
))
|
|
||||||
);
|
|
||||||
language-server = builtins.foldl' (acc: cfg: acc // (cfg.helix.language-server or { })) { } configs;
|
|
||||||
};
|
|
||||||
file = tomlFormatter.generate "languages.toml" helixLanguages.content;
|
|
||||||
};
|
|
||||||
treefmtPrograms = builtins.foldl' (
|
|
||||||
acc: cfg: deepMerge acc (cfg.treefmt.programs or { })
|
|
||||||
) { } configs;
|
|
||||||
preCommitHooks = builtins.foldl' (acc: cfg: acc // (cfg.pre-commit or { })) { } configs;
|
|
||||||
devshellConfigs = {
|
|
||||||
commands = builtins.concatMap (cfg: cfg.devshell.commands) (
|
|
||||||
(builtins.filter (cfg: builtins.hasAttr "commands" cfg.devshell) (
|
|
||||||
builtins.filter (cfg: builtins.hasAttr "devshell" cfg) configs
|
|
||||||
))
|
|
||||||
);
|
|
||||||
packages = builtins.concatMap (cfg: cfg.devshell.packages) (
|
|
||||||
(builtins.filter (cfg: builtins.hasAttr "packages" cfg.devshell) (
|
|
||||||
builtins.filter (cfg: builtins.hasAttr "devshell" cfg) configs
|
|
||||||
))
|
|
||||||
);
|
|
||||||
devshellStartup = builtins.foldl' (
|
|
||||||
acc: cfg: acc // (cfg.devshell.devshellStartup or { })
|
|
||||||
) { } configs;
|
|
||||||
};
|
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
_module.args.pkgs = pkgs;
|
_module.args.pkgs = pkgs;
|
||||||
|
@ -135,100 +80,52 @@
|
||||||
devshells.default = {
|
devshells.default = {
|
||||||
commands = [
|
commands = [
|
||||||
{
|
{
|
||||||
help = "`home-manager switch` for asahi";
|
help = " `home-manager switch` for asahi";
|
||||||
name = "switch-asahi";
|
name = "hm-asahi";
|
||||||
command = "${pkgs.home-manager}/bin/home-manager switch --flake .#asahi";
|
command = "${pkgs.home-manager}/bin/home-manager switch --flake .#asahi";
|
||||||
|
category = " home-manager (Asahi)";
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
help = "`home-manager switch` for asahi with backup";
|
help = " `home-manager switch` for asahi with backup";
|
||||||
name = "switch-asahi-backup";
|
name = "hm-asahi-backup";
|
||||||
command = "${pkgs.home-manager}/bin/home-manager switch --flake .#asahi -b backup";
|
command = "${pkgs.home-manager}/bin/home-manager switch --flake .#asahi -b backup";
|
||||||
|
category = " home-manager (Asahi)";
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
help = "update dependencies";
|
help = " show home-manager documentation";
|
||||||
name = "update";
|
|
||||||
command = "${pkgs.lix}/bin/nix flake update";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
help = "show home-manager documentation";
|
|
||||||
name = "man-home";
|
name = "man-home";
|
||||||
command = "${pkgs.man}/bin/man home-configuration.nix";
|
command = "${pkgs.man}/bin/man home-configuration.nix";
|
||||||
|
category = " home-manager";
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
help = "generate Helix grammars";
|
help = " generate age key";
|
||||||
name = "_helix-grammars";
|
name = "age-generate-key";
|
||||||
command = "${pkgs.helix}/bin/hx --grammar fetch && hx --grammar build";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
help = "generate age key";
|
|
||||||
name = "_age-generate-key";
|
|
||||||
command = "${pkgs.uutils-coreutils-noprefix}/bin/mkdir -p ~/.config/sops/age && ${pkgs.age}/bin/age-keygen -o ~/.config/sops/age/keys.txt && ${pkgs.uutils-coreutils-noprefix}/bin/cat ~/.config/sops/age/keys.txt";
|
command = "${pkgs.uutils-coreutils-noprefix}/bin/mkdir -p ~/.config/sops/age && ${pkgs.age}/bin/age-keygen -o ~/.config/sops/age/keys.txt && ${pkgs.uutils-coreutils-noprefix}/bin/cat ~/.config/sops/age/keys.txt";
|
||||||
|
category = " SOPS";
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
help = "edit secrets.yaml";
|
help = " edit secrets.yaml";
|
||||||
name = "sops-edit";
|
name = "sops-edit";
|
||||||
command = "${pkgs.sops}/bin/sops edit ./home/secrets/secrets.yaml";
|
command = "${pkgs.sops}/bin/sops edit ./home/secrets/secrets.yaml";
|
||||||
|
category = " SOPS";
|
||||||
}
|
}
|
||||||
] ++ devshellConfigs.commands;
|
];
|
||||||
packages = [
|
packages = [
|
||||||
pkgs.age
|
pkgs.age
|
||||||
pkgs.forgejo-cli
|
pkgs.forgejo-cli
|
||||||
pkgs.git
|
|
||||||
pkgs.helix
|
|
||||||
pkgs.home-manager
|
pkgs.home-manager
|
||||||
pkgs.jujutsu
|
|
||||||
pkgs.lix
|
|
||||||
pkgs.man
|
|
||||||
pkgs.sops
|
pkgs.sops
|
||||||
pkgs.uutils-coreutils-noprefix
|
];
|
||||||
] ++ devshellConfigs.packages;
|
|
||||||
devshell = {
|
devshell = {
|
||||||
motd = ''
|
motd = ''
|
||||||
{202}🔨 Nix Laptop Configuration{reset}
|
{202} Nix Laptop Configuration{reset}
|
||||||
$(type -p menu &>/dev/null && menu)
|
$(type -p menu &>/dev/null && menu)
|
||||||
'';
|
'';
|
||||||
name = "Laptop Configuration";
|
name = "Laptop Configuration";
|
||||||
startup = devshellConfigs.devshellStartup // {
|
|
||||||
# https://github.com/helix-editor/helix/blob/master/languages.toml
|
|
||||||
# https://helix-editor.vercel.app/reference/formatters
|
|
||||||
# https://docs.helix-editor.com/lang-support.html
|
|
||||||
helix_config = {
|
|
||||||
text = ''
|
|
||||||
mkdir -p .helix
|
|
||||||
${pkgs.uutils-coreutils-noprefix}/bin/ln -fs ${helixLanguages.file} ./${helixLanguages.directory}/${helixLanguages.filename}
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
pre-commit.text = ''
|
|
||||||
${config.pre-commit.installationScript}
|
|
||||||
'';
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
pre-commit.settings.excludes = [ "home/vencord.nix" ];
|
||||||
# https://flake.parts/options/git-hooks-nix.html
|
treefmt.settings.global.excludes = [ "home/vencord.nix" ];
|
||||||
pre-commit.settings = {
|
|
||||||
hooks = preCommitHooks // {
|
|
||||||
treefmt = {
|
|
||||||
enable = true;
|
|
||||||
package = treefmt;
|
|
||||||
};
|
|
||||||
check-merge-conflicts.enable = true;
|
|
||||||
check-symlinks.enable = true;
|
|
||||||
flake-checker.enable = true;
|
|
||||||
};
|
|
||||||
excludes = [
|
|
||||||
".vale"
|
|
||||||
"home/vencord.nix"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
# https://flake.parts/options/treefmt-nix.html
|
|
||||||
treefmt = {
|
|
||||||
projectRootFile = "flake.nix";
|
|
||||||
programs = treefmtPrograms;
|
|
||||||
settings.global.excludes = [
|
|
||||||
".vale/*"
|
|
||||||
"home/vencord.nix"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
|
@ -786,6 +786,10 @@ in
|
||||||
name = "ltex-plus Supported Languages";
|
name = "ltex-plus Supported Languages";
|
||||||
url = "https://ltex-plus.github.io/ltex-plus/supported-languages.html";
|
url = "https://ltex-plus.github.io/ltex-plus/supported-languages.html";
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
name = "Nerd Fonts Cheatsheet";
|
||||||
|
url = "https://www.nerdfonts.com/cheat-sheet";
|
||||||
|
}
|
||||||
{
|
{
|
||||||
name = "Nix Firefox Addons Search";
|
name = "Nix Firefox Addons Search";
|
||||||
url = "https://nur.nix-community.org/repos/rycee/";
|
url = "https://nur.nix-community.org/repos/rycee/";
|
||||||
|
|
8
languages/default.nix
Normal file
8
languages/default.nix
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
{ ... }:
|
||||||
|
let
|
||||||
|
entries = builtins.attrNames (builtins.readDir ./.);
|
||||||
|
configs = builtins.filter (dir: builtins.pathExists (./. + "/${dir}/default.nix")) entries;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = builtins.map (name: (./. + "/${name}")) configs;
|
||||||
|
}
|
|
@ -1,123 +0,0 @@
|
||||||
{ pkgs, treefmt }:
|
|
||||||
let
|
|
||||||
dictionary = [
|
|
||||||
"Asahi"
|
|
||||||
"Catppuccin"
|
|
||||||
"LLMs"
|
|
||||||
"LTeX"
|
|
||||||
"NixOS"
|
|
||||||
"Nushell"
|
|
||||||
"Stylix"
|
|
||||||
];
|
|
||||||
tomlFormatter = pkgs.formats.toml { };
|
|
||||||
vale = {
|
|
||||||
valeDirectory = ".vale";
|
|
||||||
stylesDirectory = "styles";
|
|
||||||
dictionary = {
|
|
||||||
directory = "config/vocabularies/General";
|
|
||||||
filename = "accept.txt";
|
|
||||||
content = builtins.concatStringsSep "\n" dictionary;
|
|
||||||
file = pkgs.writeTextFile {
|
|
||||||
name = vale.dictionary.filename;
|
|
||||||
text = vale.dictionary.content;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
config = {
|
|
||||||
filename = ".vale.ini";
|
|
||||||
content = ''
|
|
||||||
StylesPath = styles
|
|
||||||
|
|
||||||
MinAlertLevel = suggestion
|
|
||||||
|
|
||||||
Vocab = General
|
|
||||||
|
|
||||||
# https://vale.sh/explorer
|
|
||||||
Packages = RedHat, proselint, write-good, alex
|
|
||||||
|
|
||||||
[*.{md}]
|
|
||||||
BasedOnStyles = Vale, RedHat, proselint, write-good, alex
|
|
||||||
'';
|
|
||||||
file = pkgs.writeTextFile {
|
|
||||||
name = vale.config.filename;
|
|
||||||
text = vale.config.content;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
directory = {
|
|
||||||
base = ../.vale/styles;
|
|
||||||
full = pkgs.runCommand vale.valeDirectory { } ''
|
|
||||||
${pkgs.uutils-coreutils-noprefix}/bin/mkdir -p $out/${vale.stylesDirectory}/${vale.dictionary.directory}
|
|
||||||
${pkgs.uutils-coreutils-noprefix}/bin/cp -r ${vale.directory.base}/* $out/${vale.stylesDirectory}
|
|
||||||
${pkgs.uutils-coreutils-noprefix}/bin/ln -fs ${vale.dictionary.file} $out/${vale.stylesDirectory}/${vale.dictionary.directory}/${vale.dictionary.filename}
|
|
||||||
${pkgs.uutils-coreutils-noprefix}/bin/ln -fs ${vale.config.file} $out/${vale.config.filename};
|
|
||||||
'';
|
|
||||||
configFile = "${vale.directory.full}/${vale.config.filename}";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
typos = {
|
|
||||||
content = {
|
|
||||||
default.extendWords = builtins.listToAttrs (
|
|
||||||
builtins.map (x: {
|
|
||||||
name = x;
|
|
||||||
value = x;
|
|
||||||
}) dictionary
|
|
||||||
);
|
|
||||||
};
|
|
||||||
file = tomlFormatter.generate "typos.toml" typos.content;
|
|
||||||
};
|
|
||||||
in
|
|
||||||
{
|
|
||||||
helix.language-server = {
|
|
||||||
# https://ltex-plus.github.io/ltex-plus/supported-languages.html
|
|
||||||
ltex-ls-plus = {
|
|
||||||
command = "${pkgs.ltex-ls-plus}/bin/ltex-ls-plus";
|
|
||||||
config.ltex = {
|
|
||||||
dictionary.en-US = dictionary;
|
|
||||||
additionalRules.enablePickyRules = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
# https://vale.sh/docs/formats/code
|
|
||||||
vale-ls = {
|
|
||||||
command = "${pkgs.vale-ls}/bin/vale-ls";
|
|
||||||
config.configPath = vale.directory.configFile;
|
|
||||||
};
|
|
||||||
# https://writewithharper.com/docs/integrations/language-server#Supported-Languages
|
|
||||||
harper-ls.command = "${pkgs.harper}/bin/harper-ls";
|
|
||||||
typos = {
|
|
||||||
command = "${pkgs.typos-lsp}/bin/typos-lsp";
|
|
||||||
config.config = typos.file.outPath;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
pre-commit = {
|
|
||||||
typos = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
configPath = typos.file.outPath;
|
|
||||||
locale = "en-us";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
vale = {
|
|
||||||
enable = true;
|
|
||||||
settings.configPath = vale.directory.configFile;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
treefmt.programs.typos = {
|
|
||||||
enable = true;
|
|
||||||
configFile = typos.file.outPath;
|
|
||||||
locale = "en-us";
|
|
||||||
};
|
|
||||||
devshell = {
|
|
||||||
commands = [
|
|
||||||
{
|
|
||||||
help = "sync vale configuration";
|
|
||||||
name = "vale-sync";
|
|
||||||
command = "${pkgs.vale}/bin/vale sync --config ${vale.valeDirectory}/${vale.config.filename}";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
packages = [ pkgs.vale ];
|
|
||||||
devshellStartup = {
|
|
||||||
vale_config.text = ''
|
|
||||||
${pkgs.uutils-coreutils-noprefix}/bin/ln -fs ${vale.config.file} ${vale.valeDirectory}/${vale.config.filename}
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
1
languages/en-us/.vale/.vale.ini
Symbolic link
1
languages/en-us/.vale/.vale.ini
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
/nix/store/qjykb097qnh6c6qrl9v58143kj5j9mn5-vale.ini
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue