diff --git a/.envrc b/.envrc index a80d039..64cc1d4 100644 --- a/.envrc +++ b/.envrc @@ -1,3 +1,3 @@ -watch_file ./languages -watch_file ./.vale/styles +watch_dir ./languages +watch_dir ./modules use flake diff --git a/README.md b/README.md index dcd8485..5705845 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,8 @@ for this Flake. ## ⭐ Features - 🏠 **`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. - ✹ **`treefmt`** (with Helix integration): Automatically formats the code in this repository when modifying it, with features to check the flake for diff --git a/flake.nix b/flake.nix index bcaf3fe..8a59d9a 100644 --- a/flake.nix +++ b/flake.nix @@ -39,10 +39,9 @@ { systems = [ "aarch64-linux" ]; imports = [ - inputs.devshell.flakeModule - inputs.git-hooks-nix.flakeModule inputs.home-manager.flakeModules.home-manager - inputs.treefmt-nix.flakeModule + ./modules + ./languages ]; flake = { # https://nix-community.github.io/home-manager/options.xhtml @@ -53,37 +52,20 @@ inherit pkgs; extraSpecialArgs = { inherit inputs pkgs; }; modules = [ - ./home/home.nix - inputs.stylix.homeModules.stylix - inputs.catppuccin.homeModules.catppuccin + { nixpkgs.overlays = [ inputs.nur.overlays.default ]; } inputs.lix-module.nixosModules.default inputs.sops-nix.homeManagerModules.sops - { nixpkgs.overlays = [ inputs.nur.overlays.default ]; } + inputs.stylix.homeModules.stylix + inputs.catppuccin.homeModules.catppuccin + ./home/home.nix ]; } ); }; }; perSystem = - { system, config, ... }: + { system, ... }: 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 { inherit system; overlays = [ @@ -91,43 +73,6 @@ 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 { _module.args.pkgs = pkgs; @@ -135,100 +80,52 @@ devshells.default = { commands = [ { - help = "`home-manager switch` for asahi"; - name = "switch-asahi"; + help = " `home-manager switch` for asahi"; + name = "hm-asahi"; command = "${pkgs.home-manager}/bin/home-manager switch --flake .#asahi"; + category = " home-manager (Asahi)"; } { - help = "`home-manager switch` for asahi with backup"; - name = "switch-asahi-backup"; + help = "ó°žš `home-manager switch` for asahi with backup"; + name = "hm-asahi-backup"; command = "${pkgs.home-manager}/bin/home-manager switch --flake .#asahi -b backup"; + category = " home-manager (Asahi)"; } { - help = "update dependencies"; - name = "update"; - command = "${pkgs.lix}/bin/nix flake update"; - } - { - help = "show home-manager documentation"; + help = "󰘄 show home-manager documentation"; name = "man-home"; command = "${pkgs.man}/bin/man home-configuration.nix"; + category = " home-manager"; } { - help = "generate Helix grammars"; - name = "_helix-grammars"; - command = "${pkgs.helix}/bin/hx --grammar fetch && hx --grammar build"; - } - { - help = "generate age key"; - name = "_age-generate-key"; + 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"; + category = " SOPS"; } { - help = "edit secrets.yaml"; + help = "î«ș edit secrets.yaml"; name = "sops-edit"; command = "${pkgs.sops}/bin/sops edit ./home/secrets/secrets.yaml"; + category = " SOPS"; } - ] ++ devshellConfigs.commands; + ]; packages = [ pkgs.age pkgs.forgejo-cli - pkgs.git - pkgs.helix pkgs.home-manager - pkgs.jujutsu - pkgs.lix - pkgs.man pkgs.sops - pkgs.uutils-coreutils-noprefix - ] ++ devshellConfigs.packages; + ]; devshell = { motd = '' - {202}🔹 Nix Laptop Configuration{reset} + {202}îș§ Nix Laptop Configuration{reset} $(type -p menu &>/dev/null && menu) ''; 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} - ''; - }; }; }; - # https://flake.parts/options/git-hooks-nix.html - 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" - ]; - }; + pre-commit.settings.excludes = [ "home/vencord.nix" ]; + treefmt.settings.global.excludes = [ "home/vencord.nix" ]; }; } ); diff --git a/home/home.nix b/home/home.nix index efec760..3f6a6f8 100644 --- a/home/home.nix +++ b/home/home.nix @@ -786,6 +786,10 @@ in name = "ltex-plus Supported Languages"; 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"; url = "https://nur.nix-community.org/repos/rycee/"; diff --git a/languages/default.nix b/languages/default.nix new file mode 100644 index 0000000..66f3daa --- /dev/null +++ b/languages/default.nix @@ -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; +} diff --git a/languages/en-us.nix b/languages/en-us.nix deleted file mode 100644 index 2f29155..0000000 --- a/languages/en-us.nix +++ /dev/null @@ -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} - ''; - }; - }; -} diff --git a/languages/en-us/.vale/.vale.ini b/languages/en-us/.vale/.vale.ini new file mode 120000 index 0000000..052d6da --- /dev/null +++ b/languages/en-us/.vale/.vale.ini @@ -0,0 +1 @@ +/nix/store/qjykb097qnh6c6qrl9v58143kj5j9mn5-vale.ini \ No newline at end of file diff --git a/.vale/styles/RedHat/Abbreviations.yml b/languages/en-us/.vale/styles/RedHat/Abbreviations.yml similarity index 100% rename from .vale/styles/RedHat/Abbreviations.yml rename to languages/en-us/.vale/styles/RedHat/Abbreviations.yml diff --git a/.vale/styles/RedHat/CaseSensitiveTerms.yml b/languages/en-us/.vale/styles/RedHat/CaseSensitiveTerms.yml similarity index 100% rename from .vale/styles/RedHat/CaseSensitiveTerms.yml rename to languages/en-us/.vale/styles/RedHat/CaseSensitiveTerms.yml diff --git a/.vale/styles/RedHat/Conjunctions.yml b/languages/en-us/.vale/styles/RedHat/Conjunctions.yml similarity index 100% rename from .vale/styles/RedHat/Conjunctions.yml rename to languages/en-us/.vale/styles/RedHat/Conjunctions.yml diff --git a/.vale/styles/RedHat/ConsciousLanguage.yml b/languages/en-us/.vale/styles/RedHat/ConsciousLanguage.yml similarity index 100% rename from .vale/styles/RedHat/ConsciousLanguage.yml rename to languages/en-us/.vale/styles/RedHat/ConsciousLanguage.yml diff --git a/.vale/styles/RedHat/Contractions.yml b/languages/en-us/.vale/styles/RedHat/Contractions.yml similarity index 100% rename from .vale/styles/RedHat/Contractions.yml rename to languages/en-us/.vale/styles/RedHat/Contractions.yml diff --git a/.vale/styles/RedHat/Definitions.yml b/languages/en-us/.vale/styles/RedHat/Definitions.yml similarity index 100% rename from .vale/styles/RedHat/Definitions.yml rename to languages/en-us/.vale/styles/RedHat/Definitions.yml diff --git a/.vale/styles/RedHat/DoNotUseTerms.yml b/languages/en-us/.vale/styles/RedHat/DoNotUseTerms.yml similarity index 100% rename from .vale/styles/RedHat/DoNotUseTerms.yml rename to languages/en-us/.vale/styles/RedHat/DoNotUseTerms.yml diff --git a/.vale/styles/RedHat/Ellipses.yml b/languages/en-us/.vale/styles/RedHat/Ellipses.yml similarity index 100% rename from .vale/styles/RedHat/Ellipses.yml rename to languages/en-us/.vale/styles/RedHat/Ellipses.yml diff --git a/.vale/styles/RedHat/EmDash.yml b/languages/en-us/.vale/styles/RedHat/EmDash.yml similarity index 100% rename from .vale/styles/RedHat/EmDash.yml rename to languages/en-us/.vale/styles/RedHat/EmDash.yml diff --git a/.vale/styles/RedHat/GitLinks.yml b/languages/en-us/.vale/styles/RedHat/GitLinks.yml similarity index 100% rename from .vale/styles/RedHat/GitLinks.yml rename to languages/en-us/.vale/styles/RedHat/GitLinks.yml diff --git a/.vale/styles/RedHat/HeadingPunctuation.yml b/languages/en-us/.vale/styles/RedHat/HeadingPunctuation.yml similarity index 100% rename from .vale/styles/RedHat/HeadingPunctuation.yml rename to languages/en-us/.vale/styles/RedHat/HeadingPunctuation.yml diff --git a/.vale/styles/RedHat/Headings.yml b/languages/en-us/.vale/styles/RedHat/Headings.yml similarity index 100% rename from .vale/styles/RedHat/Headings.yml rename to languages/en-us/.vale/styles/RedHat/Headings.yml diff --git a/.vale/styles/RedHat/Hyphens.yml b/languages/en-us/.vale/styles/RedHat/Hyphens.yml similarity index 100% rename from .vale/styles/RedHat/Hyphens.yml rename to languages/en-us/.vale/styles/RedHat/Hyphens.yml diff --git a/.vale/styles/RedHat/MergeConflictMarkers.yml b/languages/en-us/.vale/styles/RedHat/MergeConflictMarkers.yml similarity index 100% rename from .vale/styles/RedHat/MergeConflictMarkers.yml rename to languages/en-us/.vale/styles/RedHat/MergeConflictMarkers.yml diff --git a/.vale/styles/RedHat/ObviousTerms.yml b/languages/en-us/.vale/styles/RedHat/ObviousTerms.yml similarity index 100% rename from .vale/styles/RedHat/ObviousTerms.yml rename to languages/en-us/.vale/styles/RedHat/ObviousTerms.yml diff --git a/.vale/styles/RedHat/OxfordComma.yml b/languages/en-us/.vale/styles/RedHat/OxfordComma.yml similarity index 100% rename from .vale/styles/RedHat/OxfordComma.yml rename to languages/en-us/.vale/styles/RedHat/OxfordComma.yml diff --git a/.vale/styles/RedHat/PascalCamelCase.yml b/languages/en-us/.vale/styles/RedHat/PascalCamelCase.yml similarity index 100% rename from .vale/styles/RedHat/PascalCamelCase.yml rename to languages/en-us/.vale/styles/RedHat/PascalCamelCase.yml diff --git a/.vale/styles/RedHat/PassiveVoice.yml b/languages/en-us/.vale/styles/RedHat/PassiveVoice.yml similarity index 100% rename from .vale/styles/RedHat/PassiveVoice.yml rename to languages/en-us/.vale/styles/RedHat/PassiveVoice.yml diff --git a/.vale/styles/RedHat/ProductCentricWriting.yml b/languages/en-us/.vale/styles/RedHat/ProductCentricWriting.yml similarity index 100% rename from .vale/styles/RedHat/ProductCentricWriting.yml rename to languages/en-us/.vale/styles/RedHat/ProductCentricWriting.yml diff --git a/.vale/styles/RedHat/README-IBM.adoc b/languages/en-us/.vale/styles/RedHat/README-IBM.adoc similarity index 100% rename from .vale/styles/RedHat/README-IBM.adoc rename to languages/en-us/.vale/styles/RedHat/README-IBM.adoc diff --git a/.vale/styles/RedHat/README-proselint.md b/languages/en-us/.vale/styles/RedHat/README-proselint.md similarity index 100% rename from .vale/styles/RedHat/README-proselint.md rename to languages/en-us/.vale/styles/RedHat/README-proselint.md diff --git a/.vale/styles/RedHat/README-write-good.md b/languages/en-us/.vale/styles/RedHat/README-write-good.md similarity index 100% rename from .vale/styles/RedHat/README-write-good.md rename to languages/en-us/.vale/styles/RedHat/README-write-good.md diff --git a/.vale/styles/RedHat/ReadabilityGrade.yml b/languages/en-us/.vale/styles/RedHat/ReadabilityGrade.yml similarity index 100% rename from .vale/styles/RedHat/ReadabilityGrade.yml rename to languages/en-us/.vale/styles/RedHat/ReadabilityGrade.yml diff --git a/.vale/styles/RedHat/ReleaseNotes.yml b/languages/en-us/.vale/styles/RedHat/ReleaseNotes.yml similarity index 100% rename from .vale/styles/RedHat/ReleaseNotes.yml rename to languages/en-us/.vale/styles/RedHat/ReleaseNotes.yml diff --git a/.vale/styles/RedHat/RepeatedWords.yml b/languages/en-us/.vale/styles/RedHat/RepeatedWords.yml similarity index 100% rename from .vale/styles/RedHat/RepeatedWords.yml rename to languages/en-us/.vale/styles/RedHat/RepeatedWords.yml diff --git a/.vale/styles/RedHat/SelfReferentialText.yml b/languages/en-us/.vale/styles/RedHat/SelfReferentialText.yml similarity index 100% rename from .vale/styles/RedHat/SelfReferentialText.yml rename to languages/en-us/.vale/styles/RedHat/SelfReferentialText.yml diff --git a/.vale/styles/RedHat/SentenceLength.yml b/languages/en-us/.vale/styles/RedHat/SentenceLength.yml similarity index 100% rename from .vale/styles/RedHat/SentenceLength.yml rename to languages/en-us/.vale/styles/RedHat/SentenceLength.yml diff --git a/.vale/styles/RedHat/SimpleWords.yml b/languages/en-us/.vale/styles/RedHat/SimpleWords.yml similarity index 100% rename from .vale/styles/RedHat/SimpleWords.yml rename to languages/en-us/.vale/styles/RedHat/SimpleWords.yml diff --git a/.vale/styles/RedHat/Slash.yml b/languages/en-us/.vale/styles/RedHat/Slash.yml similarity index 100% rename from .vale/styles/RedHat/Slash.yml rename to languages/en-us/.vale/styles/RedHat/Slash.yml diff --git a/.vale/styles/RedHat/SmartQuotes.yml b/languages/en-us/.vale/styles/RedHat/SmartQuotes.yml similarity index 100% rename from .vale/styles/RedHat/SmartQuotes.yml rename to languages/en-us/.vale/styles/RedHat/SmartQuotes.yml diff --git a/.vale/styles/RedHat/Spacing.yml b/languages/en-us/.vale/styles/RedHat/Spacing.yml similarity index 100% rename from .vale/styles/RedHat/Spacing.yml rename to languages/en-us/.vale/styles/RedHat/Spacing.yml diff --git a/.vale/styles/RedHat/Spelling.yml b/languages/en-us/.vale/styles/RedHat/Spelling.yml similarity index 100% rename from .vale/styles/RedHat/Spelling.yml rename to languages/en-us/.vale/styles/RedHat/Spelling.yml diff --git a/.vale/styles/RedHat/Symbols.yml b/languages/en-us/.vale/styles/RedHat/Symbols.yml similarity index 100% rename from .vale/styles/RedHat/Symbols.yml rename to languages/en-us/.vale/styles/RedHat/Symbols.yml diff --git a/.vale/styles/RedHat/TermsErrors.yml b/languages/en-us/.vale/styles/RedHat/TermsErrors.yml similarity index 100% rename from .vale/styles/RedHat/TermsErrors.yml rename to languages/en-us/.vale/styles/RedHat/TermsErrors.yml diff --git a/.vale/styles/RedHat/TermsSuggestions.yml b/languages/en-us/.vale/styles/RedHat/TermsSuggestions.yml similarity index 100% rename from .vale/styles/RedHat/TermsSuggestions.yml rename to languages/en-us/.vale/styles/RedHat/TermsSuggestions.yml diff --git a/.vale/styles/RedHat/TermsWarnings.yml b/languages/en-us/.vale/styles/RedHat/TermsWarnings.yml similarity index 100% rename from .vale/styles/RedHat/TermsWarnings.yml rename to languages/en-us/.vale/styles/RedHat/TermsWarnings.yml diff --git a/.vale/styles/RedHat/UserReplacedValues.yml b/languages/en-us/.vale/styles/RedHat/UserReplacedValues.yml similarity index 100% rename from .vale/styles/RedHat/UserReplacedValues.yml rename to languages/en-us/.vale/styles/RedHat/UserReplacedValues.yml diff --git a/.vale/styles/RedHat/Using.yml b/languages/en-us/.vale/styles/RedHat/Using.yml similarity index 100% rename from .vale/styles/RedHat/Using.yml rename to languages/en-us/.vale/styles/RedHat/Using.yml diff --git a/.vale/styles/RedHat/collate-output.tmpl b/languages/en-us/.vale/styles/RedHat/collate-output.tmpl similarity index 100% rename from .vale/styles/RedHat/collate-output.tmpl rename to languages/en-us/.vale/styles/RedHat/collate-output.tmpl diff --git a/.vale/styles/RedHat/meta.json b/languages/en-us/.vale/styles/RedHat/meta.json similarity index 100% rename from .vale/styles/RedHat/meta.json rename to languages/en-us/.vale/styles/RedHat/meta.json diff --git a/.vale/styles/alex/Ablist.yml b/languages/en-us/.vale/styles/alex/Ablist.yml similarity index 100% rename from .vale/styles/alex/Ablist.yml rename to languages/en-us/.vale/styles/alex/Ablist.yml diff --git a/.vale/styles/alex/Condescending.yml b/languages/en-us/.vale/styles/alex/Condescending.yml similarity index 100% rename from .vale/styles/alex/Condescending.yml rename to languages/en-us/.vale/styles/alex/Condescending.yml diff --git a/.vale/styles/alex/Gendered.yml b/languages/en-us/.vale/styles/alex/Gendered.yml similarity index 100% rename from .vale/styles/alex/Gendered.yml rename to languages/en-us/.vale/styles/alex/Gendered.yml diff --git a/.vale/styles/alex/LGBTQ.yml b/languages/en-us/.vale/styles/alex/LGBTQ.yml similarity index 100% rename from .vale/styles/alex/LGBTQ.yml rename to languages/en-us/.vale/styles/alex/LGBTQ.yml diff --git a/.vale/styles/alex/OCD.yml b/languages/en-us/.vale/styles/alex/OCD.yml similarity index 100% rename from .vale/styles/alex/OCD.yml rename to languages/en-us/.vale/styles/alex/OCD.yml diff --git a/.vale/styles/alex/Press.yml b/languages/en-us/.vale/styles/alex/Press.yml similarity index 100% rename from .vale/styles/alex/Press.yml rename to languages/en-us/.vale/styles/alex/Press.yml diff --git a/.vale/styles/alex/ProfanityLikely.yml b/languages/en-us/.vale/styles/alex/ProfanityLikely.yml similarity index 100% rename from .vale/styles/alex/ProfanityLikely.yml rename to languages/en-us/.vale/styles/alex/ProfanityLikely.yml diff --git a/.vale/styles/alex/ProfanityMaybe.yml b/languages/en-us/.vale/styles/alex/ProfanityMaybe.yml similarity index 100% rename from .vale/styles/alex/ProfanityMaybe.yml rename to languages/en-us/.vale/styles/alex/ProfanityMaybe.yml diff --git a/.vale/styles/alex/ProfanityUnlikely.yml b/languages/en-us/.vale/styles/alex/ProfanityUnlikely.yml similarity index 100% rename from .vale/styles/alex/ProfanityUnlikely.yml rename to languages/en-us/.vale/styles/alex/ProfanityUnlikely.yml diff --git a/.vale/styles/alex/README.md b/languages/en-us/.vale/styles/alex/README.md similarity index 100% rename from .vale/styles/alex/README.md rename to languages/en-us/.vale/styles/alex/README.md diff --git a/.vale/styles/alex/Race.yml b/languages/en-us/.vale/styles/alex/Race.yml similarity index 100% rename from .vale/styles/alex/Race.yml rename to languages/en-us/.vale/styles/alex/Race.yml diff --git a/.vale/styles/alex/Suicide.yml b/languages/en-us/.vale/styles/alex/Suicide.yml similarity index 100% rename from .vale/styles/alex/Suicide.yml rename to languages/en-us/.vale/styles/alex/Suicide.yml diff --git a/.vale/styles/alex/meta.json b/languages/en-us/.vale/styles/alex/meta.json similarity index 100% rename from .vale/styles/alex/meta.json rename to languages/en-us/.vale/styles/alex/meta.json diff --git a/.vale/styles/proselint/Airlinese.yml b/languages/en-us/.vale/styles/proselint/Airlinese.yml similarity index 100% rename from .vale/styles/proselint/Airlinese.yml rename to languages/en-us/.vale/styles/proselint/Airlinese.yml diff --git a/.vale/styles/proselint/AnimalLabels.yml b/languages/en-us/.vale/styles/proselint/AnimalLabels.yml similarity index 100% rename from .vale/styles/proselint/AnimalLabels.yml rename to languages/en-us/.vale/styles/proselint/AnimalLabels.yml diff --git a/.vale/styles/proselint/Annotations.yml b/languages/en-us/.vale/styles/proselint/Annotations.yml similarity index 100% rename from .vale/styles/proselint/Annotations.yml rename to languages/en-us/.vale/styles/proselint/Annotations.yml diff --git a/.vale/styles/proselint/Apologizing.yml b/languages/en-us/.vale/styles/proselint/Apologizing.yml similarity index 100% rename from .vale/styles/proselint/Apologizing.yml rename to languages/en-us/.vale/styles/proselint/Apologizing.yml diff --git a/.vale/styles/proselint/Archaisms.yml b/languages/en-us/.vale/styles/proselint/Archaisms.yml similarity index 100% rename from .vale/styles/proselint/Archaisms.yml rename to languages/en-us/.vale/styles/proselint/Archaisms.yml diff --git a/.vale/styles/proselint/But.yml b/languages/en-us/.vale/styles/proselint/But.yml similarity index 100% rename from .vale/styles/proselint/But.yml rename to languages/en-us/.vale/styles/proselint/But.yml diff --git a/.vale/styles/proselint/Cliches.yml b/languages/en-us/.vale/styles/proselint/Cliches.yml similarity index 100% rename from .vale/styles/proselint/Cliches.yml rename to languages/en-us/.vale/styles/proselint/Cliches.yml diff --git a/.vale/styles/proselint/CorporateSpeak.yml b/languages/en-us/.vale/styles/proselint/CorporateSpeak.yml similarity index 100% rename from .vale/styles/proselint/CorporateSpeak.yml rename to languages/en-us/.vale/styles/proselint/CorporateSpeak.yml diff --git a/.vale/styles/proselint/Currency.yml b/languages/en-us/.vale/styles/proselint/Currency.yml similarity index 100% rename from .vale/styles/proselint/Currency.yml rename to languages/en-us/.vale/styles/proselint/Currency.yml diff --git a/.vale/styles/proselint/Cursing.yml b/languages/en-us/.vale/styles/proselint/Cursing.yml similarity index 100% rename from .vale/styles/proselint/Cursing.yml rename to languages/en-us/.vale/styles/proselint/Cursing.yml diff --git a/.vale/styles/proselint/DateCase.yml b/languages/en-us/.vale/styles/proselint/DateCase.yml similarity index 100% rename from .vale/styles/proselint/DateCase.yml rename to languages/en-us/.vale/styles/proselint/DateCase.yml diff --git a/.vale/styles/proselint/DateMidnight.yml b/languages/en-us/.vale/styles/proselint/DateMidnight.yml similarity index 100% rename from .vale/styles/proselint/DateMidnight.yml rename to languages/en-us/.vale/styles/proselint/DateMidnight.yml diff --git a/.vale/styles/proselint/DateRedundancy.yml b/languages/en-us/.vale/styles/proselint/DateRedundancy.yml similarity index 100% rename from .vale/styles/proselint/DateRedundancy.yml rename to languages/en-us/.vale/styles/proselint/DateRedundancy.yml diff --git a/.vale/styles/proselint/DateSpacing.yml b/languages/en-us/.vale/styles/proselint/DateSpacing.yml similarity index 100% rename from .vale/styles/proselint/DateSpacing.yml rename to languages/en-us/.vale/styles/proselint/DateSpacing.yml diff --git a/.vale/styles/proselint/DenizenLabels.yml b/languages/en-us/.vale/styles/proselint/DenizenLabels.yml similarity index 100% rename from .vale/styles/proselint/DenizenLabels.yml rename to languages/en-us/.vale/styles/proselint/DenizenLabels.yml diff --git a/.vale/styles/proselint/Diacritical.yml b/languages/en-us/.vale/styles/proselint/Diacritical.yml similarity index 100% rename from .vale/styles/proselint/Diacritical.yml rename to languages/en-us/.vale/styles/proselint/Diacritical.yml diff --git a/.vale/styles/proselint/GenderBias.yml b/languages/en-us/.vale/styles/proselint/GenderBias.yml similarity index 100% rename from .vale/styles/proselint/GenderBias.yml rename to languages/en-us/.vale/styles/proselint/GenderBias.yml diff --git a/.vale/styles/proselint/GroupTerms.yml b/languages/en-us/.vale/styles/proselint/GroupTerms.yml similarity index 100% rename from .vale/styles/proselint/GroupTerms.yml rename to languages/en-us/.vale/styles/proselint/GroupTerms.yml diff --git a/.vale/styles/proselint/Hedging.yml b/languages/en-us/.vale/styles/proselint/Hedging.yml similarity index 100% rename from .vale/styles/proselint/Hedging.yml rename to languages/en-us/.vale/styles/proselint/Hedging.yml diff --git a/.vale/styles/proselint/Hyperbole.yml b/languages/en-us/.vale/styles/proselint/Hyperbole.yml similarity index 100% rename from .vale/styles/proselint/Hyperbole.yml rename to languages/en-us/.vale/styles/proselint/Hyperbole.yml diff --git a/.vale/styles/proselint/Jargon.yml b/languages/en-us/.vale/styles/proselint/Jargon.yml similarity index 100% rename from .vale/styles/proselint/Jargon.yml rename to languages/en-us/.vale/styles/proselint/Jargon.yml diff --git a/.vale/styles/proselint/LGBTOffensive.yml b/languages/en-us/.vale/styles/proselint/LGBTOffensive.yml similarity index 100% rename from .vale/styles/proselint/LGBTOffensive.yml rename to languages/en-us/.vale/styles/proselint/LGBTOffensive.yml diff --git a/.vale/styles/proselint/LGBTTerms.yml b/languages/en-us/.vale/styles/proselint/LGBTTerms.yml similarity index 100% rename from .vale/styles/proselint/LGBTTerms.yml rename to languages/en-us/.vale/styles/proselint/LGBTTerms.yml diff --git a/.vale/styles/proselint/Malapropisms.yml b/languages/en-us/.vale/styles/proselint/Malapropisms.yml similarity index 100% rename from .vale/styles/proselint/Malapropisms.yml rename to languages/en-us/.vale/styles/proselint/Malapropisms.yml diff --git a/.vale/styles/proselint/Needless.yml b/languages/en-us/.vale/styles/proselint/Needless.yml similarity index 100% rename from .vale/styles/proselint/Needless.yml rename to languages/en-us/.vale/styles/proselint/Needless.yml diff --git a/.vale/styles/proselint/Nonwords.yml b/languages/en-us/.vale/styles/proselint/Nonwords.yml similarity index 100% rename from .vale/styles/proselint/Nonwords.yml rename to languages/en-us/.vale/styles/proselint/Nonwords.yml diff --git a/.vale/styles/proselint/Oxymorons.yml b/languages/en-us/.vale/styles/proselint/Oxymorons.yml similarity index 100% rename from .vale/styles/proselint/Oxymorons.yml rename to languages/en-us/.vale/styles/proselint/Oxymorons.yml diff --git a/.vale/styles/proselint/P-Value.yml b/languages/en-us/.vale/styles/proselint/P-Value.yml similarity index 100% rename from .vale/styles/proselint/P-Value.yml rename to languages/en-us/.vale/styles/proselint/P-Value.yml diff --git a/.vale/styles/proselint/RASSyndrome.yml b/languages/en-us/.vale/styles/proselint/RASSyndrome.yml similarity index 100% rename from .vale/styles/proselint/RASSyndrome.yml rename to languages/en-us/.vale/styles/proselint/RASSyndrome.yml diff --git a/.vale/styles/proselint/README.md b/languages/en-us/.vale/styles/proselint/README.md similarity index 100% rename from .vale/styles/proselint/README.md rename to languages/en-us/.vale/styles/proselint/README.md diff --git a/.vale/styles/proselint/Skunked.yml b/languages/en-us/.vale/styles/proselint/Skunked.yml similarity index 100% rename from .vale/styles/proselint/Skunked.yml rename to languages/en-us/.vale/styles/proselint/Skunked.yml diff --git a/.vale/styles/proselint/Spelling.yml b/languages/en-us/.vale/styles/proselint/Spelling.yml similarity index 100% rename from .vale/styles/proselint/Spelling.yml rename to languages/en-us/.vale/styles/proselint/Spelling.yml diff --git a/.vale/styles/proselint/Typography.yml b/languages/en-us/.vale/styles/proselint/Typography.yml similarity index 100% rename from .vale/styles/proselint/Typography.yml rename to languages/en-us/.vale/styles/proselint/Typography.yml diff --git a/.vale/styles/proselint/Uncomparables.yml b/languages/en-us/.vale/styles/proselint/Uncomparables.yml similarity index 100% rename from .vale/styles/proselint/Uncomparables.yml rename to languages/en-us/.vale/styles/proselint/Uncomparables.yml diff --git a/.vale/styles/proselint/Very.yml b/languages/en-us/.vale/styles/proselint/Very.yml similarity index 100% rename from .vale/styles/proselint/Very.yml rename to languages/en-us/.vale/styles/proselint/Very.yml diff --git a/.vale/styles/proselint/meta.json b/languages/en-us/.vale/styles/proselint/meta.json similarity index 100% rename from .vale/styles/proselint/meta.json rename to languages/en-us/.vale/styles/proselint/meta.json diff --git a/.vale/styles/write-good/Cliches.yml b/languages/en-us/.vale/styles/write-good/Cliches.yml similarity index 100% rename from .vale/styles/write-good/Cliches.yml rename to languages/en-us/.vale/styles/write-good/Cliches.yml diff --git a/.vale/styles/write-good/E-Prime.yml b/languages/en-us/.vale/styles/write-good/E-Prime.yml similarity index 100% rename from .vale/styles/write-good/E-Prime.yml rename to languages/en-us/.vale/styles/write-good/E-Prime.yml diff --git a/.vale/styles/write-good/Illusions.yml b/languages/en-us/.vale/styles/write-good/Illusions.yml similarity index 100% rename from .vale/styles/write-good/Illusions.yml rename to languages/en-us/.vale/styles/write-good/Illusions.yml diff --git a/.vale/styles/write-good/Passive.yml b/languages/en-us/.vale/styles/write-good/Passive.yml similarity index 100% rename from .vale/styles/write-good/Passive.yml rename to languages/en-us/.vale/styles/write-good/Passive.yml diff --git a/.vale/styles/write-good/README.md b/languages/en-us/.vale/styles/write-good/README.md similarity index 100% rename from .vale/styles/write-good/README.md rename to languages/en-us/.vale/styles/write-good/README.md diff --git a/.vale/styles/write-good/So.yml b/languages/en-us/.vale/styles/write-good/So.yml similarity index 100% rename from .vale/styles/write-good/So.yml rename to languages/en-us/.vale/styles/write-good/So.yml diff --git a/.vale/styles/write-good/ThereIs.yml b/languages/en-us/.vale/styles/write-good/ThereIs.yml similarity index 100% rename from .vale/styles/write-good/ThereIs.yml rename to languages/en-us/.vale/styles/write-good/ThereIs.yml diff --git a/.vale/styles/write-good/TooWordy.yml b/languages/en-us/.vale/styles/write-good/TooWordy.yml similarity index 100% rename from .vale/styles/write-good/TooWordy.yml rename to languages/en-us/.vale/styles/write-good/TooWordy.yml diff --git a/.vale/styles/write-good/Weasel.yml b/languages/en-us/.vale/styles/write-good/Weasel.yml similarity index 100% rename from .vale/styles/write-good/Weasel.yml rename to languages/en-us/.vale/styles/write-good/Weasel.yml diff --git a/.vale/styles/write-good/meta.json b/languages/en-us/.vale/styles/write-good/meta.json similarity index 100% rename from .vale/styles/write-good/meta.json rename to languages/en-us/.vale/styles/write-good/meta.json diff --git a/languages/en-us/default.nix b/languages/en-us/default.nix new file mode 100644 index 0000000..4891017 --- /dev/null +++ b/languages/en-us/default.nix @@ -0,0 +1,141 @@ +{ flake-parts-lib, ... }: +let + dictionary = [ + "Asahi" + "Catppuccin" + "LLMs" + "LTeX" + "NixOS" + "Nushell" + "Stylix" + ]; +in +{ + imports = [ + ../../modules/base + ../../modules/helix + ]; + options.perSystem = flake-parts-lib.mkPerSystemOption ( + { pkgs, ... }: + let + 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 + { + config = { + helix.languages.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.settings = { + hooks = { + typos = { + enable = true; + settings = { + configPath = typos.file.outPath; + locale = "en-us"; + }; + }; + vale = { + enable = true; + settings.configPath = vale.directory.configFile; + }; + }; + excludes = [ "languages/en-us/.vale" ]; + }; + treefmt = { + programs.typos = { + enable = true; + configFile = typos.file.outPath; + locale = "en-us"; + }; + settings.global.excludes = [ "languages/en-us/.vale/*" ]; + }; + devshells.default = { + # commands = [ + # { + # help = "ï‘Ș sync vale configuration"; + # name = "vale-sync"; + # command = "${pkgs.vale}/bin/vale sync --config ${vale.valeDirectory}/${vale.config.filename}"; + # category = " Languages (en_US)"; + # } + # ]; + # packages = [ pkgs.vale ]; + devshell.startup.vale_config.text = '' + ${pkgs.uutils-coreutils-noprefix}/bin/ln -fs ${vale.config.file} ${vale.valeDirectory}/${vale.config.filename} + ''; + }; + }; + } + ); +} diff --git a/languages/markdown.nix b/languages/markdown.nix deleted file mode 100644 index 4eaacf0..0000000 --- a/languages/markdown.nix +++ /dev/null @@ -1,40 +0,0 @@ -{ pkgs, treefmt }: -{ - helix = { - language = { - name = "markdown"; - language-servers = [ - "marksman" - "ltex-ls-plus" - "vale-ls" - "typos" - ]; - formatter = { - command = "${treefmt}/bin/treefmt"; - args = [ - "--stdin" - ".md" - "--quiet" - ]; - }; - auto-format = true; - }; - language-server = { - marksman.command = "${pkgs.marksman}/bin/marksman"; - }; - }; - treefmt.programs.dprint = { - enable = true; - settings = { - plugins = (pkgs.dprint-plugins.getPluginList (plugins: with plugins; [ dprint-plugin-markdown ])); - markdown = { - lineWidth = 80; - textWrap = "always"; - }; - }; - includes = [ "*.md" ]; - }; - pre-commit = { - markdownlint.enable = true; - }; -} diff --git a/languages/markdown/default.nix b/languages/markdown/default.nix new file mode 100644 index 0000000..d89f92a --- /dev/null +++ b/languages/markdown/default.nix @@ -0,0 +1,50 @@ +{ flake-parts-lib, ... }: +{ + imports = [ + ../../modules/base + ../../modules/helix + ../en-us + ]; + options.perSystem = flake-parts-lib.mkPerSystemOption ( + { config, pkgs, ... }: + { + config = { + helix.languages = { + language = [ + { + name = "markdown"; + language-servers = [ + "marksman" + "ltex-ls-plus" + "vale-ls" + "typos" + ]; + formatter = { + command = "${config.treefmt.build.wrapper}/bin/treefmt"; + args = [ + "--stdin" + ".md" + "--quiet" + ]; + }; + auto-format = true; + } + ]; + language-server.marksman.command = "${pkgs.marksman}/bin/marksman"; + }; + treefmt.programs.dprint = { + enable = true; + settings = { + plugins = (pkgs.dprint-plugins.getPluginList (plugins: with plugins; [ dprint-plugin-markdown ])); + markdown = { + lineWidth = 80; + textWrap = "always"; + }; + }; + includes = [ "*.md" ]; + }; + pre-commit.settings.hooks.markdownlint.enable = true; + }; + } + ); +} diff --git a/languages/nix.nix b/languages/nix.nix deleted file mode 100644 index be4cfca..0000000 --- a/languages/nix.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ pkgs, treefmt }: -{ - helix = { - language = { - name = "nix"; - language-servers = [ - "nil" - "harper-ls" - "typos" - ]; - formatter = { - command = "${treefmt}/bin/treefmt"; - args = [ - "--stdin" - ".nix" - "--quiet" - ]; - }; - auto-format = true; - }; - language-server.nil.command = "${pkgs.nil}/bin/nil"; - }; - treefmt.programs.nixfmt = { - enable = true; - strict = true; - }; -} diff --git a/languages/nix/default.nix b/languages/nix/default.nix new file mode 100644 index 0000000..a7a6ee6 --- /dev/null +++ b/languages/nix/default.nix @@ -0,0 +1,39 @@ +{ flake-parts-lib, ... }: +{ + imports = [ + ../../modules/base + ../../modules/helix + ../en-us + ]; + options.perSystem = flake-parts-lib.mkPerSystemOption ( + { config, pkgs, ... }: + { + helix.languages = { + language = [ + { + name = "nix"; + language-servers = [ + "nil" + "harper-ls" + "typos" + ]; + formatter = { + command = "${config.treefmt.build.wrapper}/bin/treefmt"; + args = [ + "--stdin" + ".nix" + "--quiet" + ]; + }; + auto-format = true; + } + ]; + language-server.nil.command = "${pkgs.nil}/bin/nil"; + }; + treefmt.programs.nixfmt = { + enable = true; + strict = true; + }; + } + ); +} diff --git a/languages/toml.nix b/languages/toml.nix deleted file mode 100644 index 48c51a8..0000000 --- a/languages/toml.nix +++ /dev/null @@ -1,25 +0,0 @@ -{ pkgs, treefmt }: -{ - helix = { - language = { - name = "toml"; - language-servers = [ - "taplo" - "harper-ls" - "typos" - ]; - formatter = { - command = "${treefmt}/bin/treefmt"; - args = [ - "--stdin" - ".toml" - "--quiet" - ]; - }; - auto-format = true; - }; - language-server.taplo.command = "${pkgs.taplo}/bin/taplo"; - }; - treefmt.programs.taplo.enable = true; - pre-commit.check-toml.enable = true; -} diff --git a/languages/toml/default.nix b/languages/toml/default.nix new file mode 100644 index 0000000..d1ca2ab --- /dev/null +++ b/languages/toml/default.nix @@ -0,0 +1,39 @@ +{ flake-parts-lib, ... }: +{ + imports = [ + ../../modules/base + ../../modules/helix + ../en-us + ]; + options.perSystem = flake-parts-lib.mkPerSystemOption ( + { config, pkgs, ... }: + { + config = { + helix.languages = { + language = [ + { + name = "toml"; + language-servers = [ + "taplo" + "harper-ls" + "typos" + ]; + formatter = { + command = "${config.treefmt.build.wrapper}/bin/treefmt"; + args = [ + "--stdin" + ".toml" + "--quiet" + ]; + }; + auto-format = true; + } + ]; + language-server.taplo.command = "${pkgs.taplo}/bin/taplo"; + }; + treefmt.programs.taplo.enable = true; + pre-commit.settings.hooks.check-toml.enable = true; + }; + } + ); +} diff --git a/languages/yaml.nix b/languages/yaml.nix deleted file mode 100644 index abb6567..0000000 --- a/languages/yaml.nix +++ /dev/null @@ -1,37 +0,0 @@ -{ pkgs, treefmt }: -{ - helix = { - language = { - name = "yaml"; - language-servers = [ - "yaml-language-server" - "harper-ls" - "typos" - ]; - formatter = { - command = "${treefmt}/bin/treefmt"; - args = [ - "--stdin" - ".yaml" - "--quiet" - ]; - }; - auto-format = true; - }; - language-server.yaml-language-server.command = "${pkgs.yaml-language-server}/bin/yaml-language-server"; - }; - treefmt.programs.dprint = { - enable = true; - settings.plugins = ( - pkgs.dprint-plugins.getPluginList (plugins: with plugins; [ g-plane-pretty_yaml ]) - ); - includes = [ - "*.yaml" - "*.yml" - ]; - }; - pre-commit = { - check-yaml.enable = true; - sort-simple-yaml.enable = true; - }; -} diff --git a/languages/yaml/default.nix b/languages/yaml/default.nix new file mode 100644 index 0000000..90a8558 --- /dev/null +++ b/languages/yaml/default.nix @@ -0,0 +1,51 @@ +{ flake-parts-lib, ... }: +{ + imports = [ + ../../modules/base + ../../modules/helix + ../en-us + ]; + options.perSystem = flake-parts-lib.mkPerSystemOption ( + { config, pkgs, ... }: + { + config = { + helix.languages = { + language = [ + { + name = "yaml"; + language-servers = [ + "yaml-language-server" + "harper-ls" + "typos" + ]; + formatter = { + command = "${config.treefmt.build.wrapper}/bin/treefmt"; + args = [ + "--stdin" + ".yaml" + "--quiet" + ]; + }; + auto-format = true; + } + ]; + language-server.yaml-language-server.command = "${pkgs.yaml-language-server}/bin/yaml-language-server"; + }; + treefmt.programs.dprint = { + enable = true; + settings.plugins = ( + pkgs.dprint-plugins.getPluginList (plugins: with plugins; [ g-plane-pretty_yaml ]) + ); + includes = [ + "*.yaml" + "*.yml" + ]; + }; + pre-commit.settings.hooks = { + check-yaml.enable = true; + sort-simple-yaml.enable = true; + }; + }; + } + ); +} diff --git a/modules/base/default.nix b/modules/base/default.nix new file mode 100644 index 0000000..f3c5cb6 --- /dev/null +++ b/modules/base/default.nix @@ -0,0 +1,57 @@ +{ flake-parts-lib, inputs, ... }: +{ + imports = [ + inputs.treefmt-nix.flakeModule + inputs.git-hooks-nix.flakeModule + inputs.devshell.flakeModule + ]; + options.perSystem = flake-parts-lib.mkPerSystemOption ( + { config, pkgs, ... }: + { + config = { + devshells.default = { + commands = [ + { + help = "󰚰 update dependencies"; + name = "update"; + command = "${pkgs.lix}/bin/nix flake update"; + category = "󱄅 Flake"; + } + { + help = "󰑓 reload direnv environment"; + name = "reload"; + command = "${pkgs.direnv}/bin/direnv reload"; + category = "󱄅 Flake"; + } + ]; + packages = [ + pkgs.git + pkgs.jujutsu + pkgs.lix + pkgs.man + pkgs.uutils-coreutils-noprefix + ]; + devshell.startup = { + pre-commit.text = '' + ${config.pre-commit.installationScript} + ''; + }; + }; + # https://flake.parts/options/git-hooks-nix.html + pre-commit.settings = { + hooks = { + treefmt = { + enable = true; + package = config.treefmt.build.wrapper; + }; + check-merge-conflicts.enable = true; + check-symlinks.enable = true; + flake-checker.enable = true; + }; + }; + # https://flake.parts/options/treefmt-nix.html + treefmt.projectRootFile = "flake.nix"; + }; + } + ); +} diff --git a/modules/default.nix b/modules/default.nix new file mode 100644 index 0000000..66f3daa --- /dev/null +++ b/modules/default.nix @@ -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; +} diff --git a/modules/helix/default.nix b/modules/helix/default.nix new file mode 100644 index 0000000..4136d2c --- /dev/null +++ b/modules/helix/default.nix @@ -0,0 +1,67 @@ +{ flake-parts-lib, lib, ... }: +let + inherit (lib) mkOption types; +in +{ + imports = [ ../base ]; + options.perSystem = flake-parts-lib.mkPerSystemOption ( + { config, pkgs, ... }: + { + options.helix = { + # 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 + languages = mkOption { + description = '' + Configuration for Helix `languages.toml`. + ''; + # type = types.attrs; + type = types.submodule { + options = { + language = mkOption { + description = '' + `language` in `languages.toml`. + ''; + type = types.listOf types.attrs; + default = [ ]; + }; + language-server = mkOption { + description = '' + `language-server` in `languages.toml`. + ''; + type = types.attrs; + default = { }; + }; + }; + }; + default = { }; + }; + }; + config.devshells.default = + let + tomlFormatter = pkgs.formats.toml { }; + helixLanguages = { + directory = ".helix"; + filename = "languages.toml"; + content = config.helix.languages; + file = tomlFormatter.generate "languages.toml" helixLanguages.content; + }; + in + { + commands = [ + { + help = " generate Helix grammars"; + name = "helix-grammars"; + command = "${pkgs.helix}/bin/hx --grammar fetch && hx --grammar build"; + category = "ó°€€ Helix"; + } + ]; + packages = [ pkgs.helix ]; + devshell.startup.helix_config.text = '' + mkdir -p .helix + ${pkgs.uutils-coreutils-noprefix}/bin/ln -fs ${helixLanguages.file} ./${helixLanguages.directory}/${helixLanguages.filename} + ''; + }; + } + ); +}