feat: switch back to zen browser
This commit is contained in:
190
modules/home-manager/zen-browser/default.nix
Normal file
190
modules/home-manager/zen-browser/default.nix
Normal file
@@ -0,0 +1,190 @@
|
||||
{
|
||||
config,
|
||||
inputs,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.programs.zen-browser;
|
||||
configDir = "${config.home.homeDirectory}/.zen";
|
||||
|
||||
# INFO: Read default shortcuts and transform them to the same attrsOf submodule structure.
|
||||
defaultShortcuts = pipe (with builtins; (fromJSON (readFile ./default_shortcuts.json)).shortcuts) [
|
||||
(map (v:
|
||||
nameValuePair (
|
||||
# HACK: Since some of the default shortcuts have a null ID, we create
|
||||
# a ID with null + group + (key or keycode). This ID will not be used
|
||||
# in the final JSON file, and is just here since Nix can't have
|
||||
# multiple attributes with the same name.
|
||||
if isNull v.id
|
||||
then "${toString v.id}-${v.action}-${v.group}-${
|
||||
if v?key
|
||||
then v.key
|
||||
else v.keycode
|
||||
}"
|
||||
else v.id
|
||||
)
|
||||
v))
|
||||
listToAttrs
|
||||
];
|
||||
in {
|
||||
imports = [inputs.zen-browser.homeModules.twilight];
|
||||
options.programs.zen-browser = {
|
||||
profiles = mkOption {
|
||||
type = with types;
|
||||
attrsOf (submodule ({...}: {
|
||||
options = {
|
||||
shortcutsForce = mkEnableOption "";
|
||||
shortcuts = mkOption {
|
||||
type = attrsOf (submodule ({
|
||||
config,
|
||||
name,
|
||||
...
|
||||
}: let
|
||||
default = defaultShortcuts.${name};
|
||||
in {
|
||||
options = {
|
||||
id = mkOption {
|
||||
type = nullOr str;
|
||||
default = name;
|
||||
};
|
||||
key = mkOption {
|
||||
type = nullOr str;
|
||||
default = optionalString (config.keycode == "") default.key;
|
||||
apply = v:
|
||||
if isNull v
|
||||
then ""
|
||||
else v;
|
||||
};
|
||||
keycode = mkOption {
|
||||
type = nullOr str;
|
||||
default = optionalString (config.key == "") default.keycode;
|
||||
apply = v:
|
||||
if isNull v
|
||||
then ""
|
||||
else v;
|
||||
};
|
||||
group = mkOption {
|
||||
type = enum (lib.unique (mapAttrsToList (_: s: s.group) defaultShortcuts));
|
||||
default = default.group;
|
||||
};
|
||||
l10nId = mkOption {
|
||||
type = enum (lib.unique (mapAttrsToList (_: s: s.l10nId) defaultShortcuts));
|
||||
default = default.l10nId;
|
||||
};
|
||||
modifiers = {
|
||||
control = mkEnableOption "";
|
||||
alt = mkEnableOption "";
|
||||
shift = mkEnableOption "";
|
||||
meta = mkEnableOption "";
|
||||
accel = mkEnableOption "";
|
||||
};
|
||||
action = mkOption {
|
||||
type = enum (lib.unique (mapAttrsToList (_: s: s.action) defaultShortcuts));
|
||||
default = default.action;
|
||||
};
|
||||
disabled = mkOption {
|
||||
type = bool;
|
||||
default = default.disabled;
|
||||
};
|
||||
reserved = mkOption {
|
||||
type = bool;
|
||||
default = default.reserved;
|
||||
};
|
||||
internal = mkOption {
|
||||
type = bool;
|
||||
default = default.internal;
|
||||
};
|
||||
};
|
||||
}));
|
||||
default = {};
|
||||
};
|
||||
# FIXME: Zen does not update zen-themes.css
|
||||
# modsForce = mkEnableOption "";
|
||||
# mods = mkOption {
|
||||
# type = attrsOf (
|
||||
# either
|
||||
# path
|
||||
# (submodule ({name, ...}: {
|
||||
# options = {
|
||||
# id = mkOption {
|
||||
# type = str;
|
||||
# default = name;
|
||||
# };
|
||||
# name = mkOption {
|
||||
# type = str;
|
||||
# };
|
||||
# description = mkOption {
|
||||
# type = str;
|
||||
# default = "";
|
||||
# };
|
||||
# homepage = mkOption {
|
||||
# type = str;
|
||||
# default = "";
|
||||
# };
|
||||
# style = mkOption {
|
||||
# type = str;
|
||||
# };
|
||||
# readme = mkOption {
|
||||
# type = str;
|
||||
# default = "";
|
||||
# };
|
||||
# image = mkOption {
|
||||
# type = str;
|
||||
# default = "";
|
||||
# };
|
||||
# author = mkOption {
|
||||
# type = str;
|
||||
# default = "";
|
||||
# };
|
||||
# version = mkOption {
|
||||
# type = str;
|
||||
# default = "";
|
||||
# };
|
||||
# tags = mkOption {
|
||||
# type = listOf str;
|
||||
# default = [];
|
||||
# };
|
||||
# createdAt = mkOption {
|
||||
# type = str;
|
||||
# default = "";
|
||||
# };
|
||||
# updatedAt = mkOption {
|
||||
# type = str;
|
||||
# default = "";
|
||||
# };
|
||||
# enabled = mkOption {
|
||||
# type = bool;
|
||||
# default = true;
|
||||
# };
|
||||
# };
|
||||
# }))
|
||||
# );
|
||||
# apply = with builtins;
|
||||
# v:
|
||||
# mapAttrs (n: v:
|
||||
# if (isPath v || isStringLike v)
|
||||
# then fromJSON (readFile v)
|
||||
# else v)
|
||||
# v;
|
||||
# default = {};
|
||||
# };
|
||||
};
|
||||
}));
|
||||
};
|
||||
};
|
||||
config = mkIf cfg.enable {
|
||||
home.file =
|
||||
concatMapAttrs (profileName: profile: {
|
||||
"${configDir}/${profileName}/zen-keyboard-shortcuts.json" = mkIf (profile.shortcuts != {}) {
|
||||
text = builtins.toJSON {shortcuts = mapAttrsToList (_: v: v) (defaultShortcuts // profile.shortcuts);};
|
||||
force = profile.shortcutsForce;
|
||||
};
|
||||
# "${configDir}/${profileName}/zen-themes.json" = mkIf (profile.mods != {}) {
|
||||
# text = builtins.toJSON profile.mods;
|
||||
# force = profile.modsForce;
|
||||
# };
|
||||
})
|
||||
cfg.profiles;
|
||||
};
|
||||
}
|
||||
2109
modules/home-manager/zen-browser/default_shortcuts.json
Normal file
2109
modules/home-manager/zen-browser/default_shortcuts.json
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user