a30f0ff077
* feat(modules): remove unnecessary IFD by moving all upstream repos to our flake inputs, we no longer need to have [IFD](https://nixos.wiki/wiki/Import_From_Derivation) in most of our modules - making evaluation faster for all configurations. the only remaining instances of IFD are in `lib.ctp.toYAML` and the themes for kitty, which is due to it's use upstream in home-manager * ci: start auto updating flake inputs * ci: init basic vm tests * ci: rename ci to format * ci: use PAT for update-lock workflow this is required to run tests such as test-vm after the pull request is made * fix(home-manager): make sure to use readFile in helix module * ci: fix typo in test-vm * ci: use verbose logging in test-vm & enable kvm * docs: add flake inputs & vm testing to CONTRIBUTING.md * feat(modules)!: use nvfetcher for upstream sources * docs: add information about nvfetcher * chore: don't include flake-compat in flake inputs while this does make us lose out on easy updating, i think it's nice not have this as a required dependency for flake users * chore: update flake inputs Flake lock file updates: • Updated input 'home-manager': 'github:nix-community/home-manager/f58889c07efa8e1328fdf93dc1796ec2a5c47f38' (2023-07-29) → 'github:nix-community/home-manager/48b0a30202516e25d9885525fbb200a045f23f26' (2023-11-01) • Updated input 'nixpkgs': 'github:NixOS/nixpkgs/2a9d660ff0f7ffde9d73be328ee6e6f10ef66b28' (2023-07-28) → 'github:NixOS/nixpkgs/0cbe9f69c234a7700596e943bfae7ef27a31b735' (2023-10-29) * chore: update nvfetcher sources * refactor: don't instantiate nixpkgs in flake + cleanup vm test * fix(home-manager): update paths from new lazygit theme revision * feat(lib)!: use constant module arguments automatically
108 lines
2.8 KiB
Nix
108 lines
2.8 KiB
Nix
lib: { config, pkgs, sources, ... }:
|
|
let
|
|
# string -> type -> string -> a -> a
|
|
# this is an internal function and shouldn't be
|
|
# used unless you know what you're doing. it takes
|
|
# a string (the name of the property, i.e., flavour
|
|
# or accent), the type of the property, the name of
|
|
# the module, followed by local config attrset
|
|
mkBasicOpt = attr: type: name:
|
|
lib.mkOption {
|
|
inherit type;
|
|
default = config.catppuccin.${attr};
|
|
description = "Catppuccin ${attr} for ${name}";
|
|
};
|
|
|
|
# string -> a -> a
|
|
# this creates a flavour option for modules
|
|
# the first string should be the name of the module,
|
|
# followed by the local config attrset
|
|
mkFlavourOpt = mkBasicOpt "flavour" types.flavourOption;
|
|
|
|
types = {
|
|
flavourOption = lib.types.enum [ "latte" "frappe" "macchiato" "mocha" ];
|
|
accentOption = lib.types.enum [
|
|
"blue"
|
|
"flamingo"
|
|
"green"
|
|
"lavender"
|
|
"maroon"
|
|
"mauve"
|
|
"peach"
|
|
"pink"
|
|
"red"
|
|
"rosewater"
|
|
"sapphire"
|
|
"sky"
|
|
"teal"
|
|
"yellow"
|
|
];
|
|
};
|
|
in
|
|
{
|
|
inherit mkBasicOpt mkFlavourOpt types;
|
|
|
|
# string -> string
|
|
# this capitalizes the first letter in a string,
|
|
# which is sometimes needed in order to format
|
|
# the names of themes correctly
|
|
mkUpper = str:
|
|
with builtins;
|
|
(lib.toUpper (substring 0 1 str)) + (substring 1 (stringLength str) str);
|
|
|
|
# a -> path -> a
|
|
# fromJSON but for yaml (and without readFile)
|
|
# a should be the local pkgs attrset
|
|
fromYaml = file:
|
|
let
|
|
inherit (builtins) fromJSON readFile;
|
|
|
|
# convert to json
|
|
json = with pkgs;
|
|
runCommand "converted.json" { } ''
|
|
${yj}/bin/yj < ${file} > $out
|
|
'';
|
|
in
|
|
fromJSON (readFile json);
|
|
|
|
# a -> path -> a
|
|
# fromJSON but for ini (and without readFile)
|
|
# a should be the local pkgs attrset
|
|
fromINI = file:
|
|
let
|
|
inherit (builtins) fromJSON readFile;
|
|
|
|
# convert to json
|
|
json = with pkgs;
|
|
runCommand "converted.json" { } ''
|
|
${jc}/bin/jc --ini < ${file} > $out
|
|
'';
|
|
in
|
|
fromJSON (readFile json);
|
|
|
|
# a -> a -> [path] -> [path]
|
|
# this imports a list of paths while inheriting
|
|
# multiple attributes
|
|
mapModules = extendedLib:
|
|
map (m: (import m {
|
|
inherit config pkgs;
|
|
sources = sources pkgs;
|
|
lib = extendedLib;
|
|
}));
|
|
|
|
# string -> a -> a
|
|
# this creates a basic attrset only containing an
|
|
# enable and flavour option. the fist string should
|
|
# be the name of the module, followed by the local config
|
|
# attrset
|
|
mkCatppuccinOpt = name: {
|
|
enable = lib.mkEnableOption "Catppuccin theme";
|
|
flavour = mkFlavourOpt name;
|
|
};
|
|
|
|
# string -> a -> a
|
|
# this creates an accent option for modules
|
|
# the first string should be the name of the module,
|
|
# followed by the local config attrset
|
|
mkAccentOpt = mkBasicOpt "accent" types.accentOption;
|
|
}
|