l browser: refactor into browsers module
This commit is contained in:
parent
2a40b6c342
commit
ea2c783e14
lass
|
@ -1,100 +1,13 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with import <stockholm/lib>;
|
||||
let
|
||||
|
||||
mainUser = config.users.extraUsers.mainUser;
|
||||
|
||||
browser-select = let
|
||||
sortedPaths = sort (a: b: a.value.precedence > b.value.precedence)
|
||||
(mapAttrsToList (name: value: { inherit name value; })
|
||||
config.lass.browser.paths);
|
||||
in pkgs.writeScriptBin "browser-select" ''
|
||||
BROWSER=$(echo -e "${concatStringsSep "\\n" (map (getAttr "name") sortedPaths)}" | ${pkgs.dmenu}/bin/dmenu)
|
||||
case $BROWSER in
|
||||
${concatMapStringsSep "\n" (n: ''
|
||||
${n.name})
|
||||
export BIN=${n.value.path}/bin/${n.name}
|
||||
;;
|
||||
'') (sortedPaths)}
|
||||
esac
|
||||
$BIN "$@"
|
||||
'';
|
||||
|
||||
createUser = script: name: groups: precedence: dpi:
|
||||
{
|
||||
lass.xjail.${name} = {
|
||||
inherit script groups dpi;
|
||||
};
|
||||
environment.systemPackages = [
|
||||
config.lass.xjail-bins.${name}
|
||||
(pkgs.writeDashBin "cx-${name}" ''
|
||||
DISPLAY=:${toString (genid_uint31 name)} ${pkgs.xclip}/bin/xclip -o | DISPLAY=:0 ${pkgs.xclip}/bin/xclip
|
||||
'')
|
||||
];
|
||||
lass.browser.paths.${name} = {
|
||||
path = config.lass.xjail-bins.${name};
|
||||
inherit precedence;
|
||||
};
|
||||
};
|
||||
|
||||
createChromiumUser = name: groups: precedence:
|
||||
createUser (pkgs.writeDash name ''
|
||||
${pkgs.chromium}/bin/chromium "$@"
|
||||
'') name groups precedence 80;
|
||||
|
||||
createFirefoxUser = name: groups: precedence:
|
||||
createUser (pkgs.writeDash name ''
|
||||
${pkgs.firefox}/bin/firefox "$@"
|
||||
'') name groups precedence 80;
|
||||
|
||||
createQuteUser = name: groups: precedence:
|
||||
createUser (pkgs.writeDash name ''
|
||||
${pkgs.qutebrowser}/bin/qutebrowser "$@"
|
||||
'') name groups precedence 60;
|
||||
|
||||
in {
|
||||
|
||||
lass.browser.select = browser-select;
|
||||
|
||||
environment.systemPackages = [
|
||||
browser-select
|
||||
];
|
||||
|
||||
{
|
||||
lass.browser.config = {
|
||||
cr = { groups = [ "audio" "video" ]; precedence = 9; };
|
||||
};
|
||||
programs.chromium = {
|
||||
enable = true;
|
||||
extensions = [
|
||||
"cjpalhdlnbpafiamejdnhcphjbkeiagm" # ublock origin
|
||||
"dbepggeogbaibhgnhhndojpepiihcmeb" # vimium
|
||||
"ihlenndgcmojhcghmfjfneahoeklbjjh" #cVim
|
||||
];
|
||||
};
|
||||
|
||||
imports = [
|
||||
{
|
||||
options.lass.browser.select = mkOption {
|
||||
type = types.path;
|
||||
};
|
||||
options.lass.browser.paths = mkOption {
|
||||
type = types.attrsOf (types.submodule ({
|
||||
options = {
|
||||
path = mkOption {
|
||||
type = types.path;
|
||||
};
|
||||
precedence = mkOption {
|
||||
type = types.int;
|
||||
default = 0;
|
||||
};
|
||||
};
|
||||
}));
|
||||
};
|
||||
}
|
||||
( createFirefoxUser "ff" [ "audio" ] 11 )
|
||||
( createQuteUser "qb" [ "audio" ] 10 )
|
||||
( createChromiumUser "cr" [ "audio" "video" ] 9 )
|
||||
( createChromiumUser "gm" [ "video" "audio" ] 8 )
|
||||
( createChromiumUser "wk" [ "audio" ] 0 )
|
||||
( createChromiumUser "fb" [ "audio" ] 0 )
|
||||
( createChromiumUser "com" [ "audio" ] 0 )
|
||||
( createChromiumUser "fin" [] (-1) )
|
||||
];
|
||||
}
|
||||
|
|
87
lass/3modules/browsers.nix
Normal file
87
lass/3modules/browsers.nix
Normal file
|
@ -0,0 +1,87 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
with import <stockholm/lib>;
|
||||
let
|
||||
|
||||
cfg = config.lass.browser;
|
||||
|
||||
browserScripts = {
|
||||
chromium = "${pkgs.chromium}/bin/chromium";
|
||||
firefox = "${pkgs.firefox.override {
|
||||
extraNativeMessagingHosts = [ pkgs.tridactyl-native ];
|
||||
}}/bin/firefox";
|
||||
qutebrowser = "${pkgs.qutebrowser}/bin/qutebrowser";
|
||||
};
|
||||
|
||||
browser-select = let
|
||||
sortedPaths = sort (a: b: a.value.precedence > b.value.precedence)
|
||||
(mapAttrsToList (name: value: { inherit name value; })
|
||||
cfg.config);
|
||||
in if (lib.length sortedPaths) > 1 then
|
||||
pkgs.writeScriptBin "browser-select" ''
|
||||
BROWSER=$(echo -e "${concatStringsSep "\\n" (map (getAttr "name") sortedPaths)}" | ${pkgs.dmenu}/bin/dmenu)
|
||||
case $BROWSER in
|
||||
${concatMapStringsSep "\n" (n: ''
|
||||
${n.name})
|
||||
export BIN=${config.lass.xjail-bins.${n.name}}/bin/${n.name}
|
||||
;;
|
||||
'') (sortedPaths)}
|
||||
esac
|
||||
$BIN "$@"
|
||||
''
|
||||
else
|
||||
let
|
||||
name = (lib.head sortedPaths).name;
|
||||
in pkgs.writeScriptBin "browser-select2" ''
|
||||
${config.lass.xjail-bins.${name}}/bin/${name} "$@"
|
||||
''
|
||||
;
|
||||
|
||||
in {
|
||||
options.lass.browser = {
|
||||
select = mkOption {
|
||||
type = types.path;
|
||||
};
|
||||
config = mkOption {
|
||||
type = types.attrsOf (types.submodule ({ config, ... }: {
|
||||
options = {
|
||||
name = mkOption {
|
||||
type = types.str;
|
||||
default = config._module.args.name;
|
||||
};
|
||||
precedence = mkOption {
|
||||
type = types.int;
|
||||
default = 0;
|
||||
};
|
||||
user = mkOption {
|
||||
type = types.str;
|
||||
default = config._module.args.name;
|
||||
};
|
||||
browser = mkOption {
|
||||
type = types.enum (attrNames browserScripts);
|
||||
default = "chromium";
|
||||
};
|
||||
groups = mkOption {
|
||||
type = types.listOf types.str;
|
||||
default = [];
|
||||
};
|
||||
};
|
||||
}));
|
||||
default = {};
|
||||
};
|
||||
};
|
||||
|
||||
config = (mkIf (cfg.config != {}) {
|
||||
lass.xjail = mapAttrs' (name: browser:
|
||||
nameValuePair name {
|
||||
script = browserScripts.${browser.browser};
|
||||
groups = browser.groups;
|
||||
}
|
||||
) cfg.config;
|
||||
environment.systemPackages = (map (browser:
|
||||
config.lass.xjail-bins.${browser.name}
|
||||
) (attrValues cfg.config)) ++ [
|
||||
browser-select
|
||||
];
|
||||
lass.browser.select = browser-select;
|
||||
});
|
||||
}
|
|
@ -15,5 +15,6 @@ _:
|
|||
./usershadow.nix
|
||||
./xjail.nix
|
||||
./autowifi.nix
|
||||
./browsers.nix
|
||||
];
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue