diff --git a/flake.nix b/flake.nix index 4ae8f79..5eeb4a4 100644 --- a/flake.nix +++ b/flake.nix @@ -106,10 +106,12 @@ pkgs stable ; + system = currentSystem; lib = inputs.nixpkgs.lib; }; docs = import ./docs { inherit inputs pkgs stable; + system = currentSystem; lib = inputs.nixpkgs.lib; build_systems = dashNixLib.build_systems; }; diff --git a/home/default.nix b/home/default.nix index f4fb47b..50f1c66 100644 --- a/home/default.nix +++ b/home/default.nix @@ -10,6 +10,7 @@ pkgs, root, alternativePkgs, + system, ... }: { xdg = { @@ -23,7 +24,7 @@ useGlobalPkgs = true; useUserPackages = true; extraSpecialArgs = { - inherit inputs root additionalInputs alternativePkgs; + inherit inputs root additionalInputs alternativePkgs system; }; users.${config.conf.username} = { @@ -32,6 +33,7 @@ ./common.nix ./themes ./sync.nix + ../modules/programs/browser/foxwrappers.nix ] ++ homeMods ++ additionalHomeMods diff --git a/lib/default.nix b/lib/default.nix index 93408b3..5bd2ce3 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -4,6 +4,7 @@ pkgs, self, stable, + system, ... }: { /* @@ -84,6 +85,7 @@ inputs mod additionalHomeConfig + system root ; pkgs = lib.mkForce ( diff --git a/modules/programs/browser/default.nix b/modules/programs/browser/default.nix index a7436d9..ade4ecf 100644 --- a/modules/programs/browser/default.nix +++ b/modules/programs/browser/default.nix @@ -1,8 +1,9 @@ { imports = [ - ./firefox.nix - ./zen.nix - ./chromium.nix ./brave.nix + ./chromium.nix + ./firefox.nix + ./librewolf.nix + ./zen.nix ]; } diff --git a/modules/programs/browser/firefox.nix b/modules/programs/browser/firefox.nix index 048263d..1bb07d7 100644 --- a/modules/programs/browser/firefox.nix +++ b/modules/programs/browser/firefox.nix @@ -70,7 +70,7 @@ value = { isDefault = true; id = 0; - extensions.packages = [ pkgs.nur.repos.rycee.firefox-addons.darkreader ]; + extensions.packages = [pkgs.nur.repos.rycee.firefox-addons.darkreader]; }; } ]; diff --git a/modules/programs/browser/foxwrappers.nix b/modules/programs/browser/foxwrappers.nix new file mode 100644 index 0000000..a6a5c21 --- /dev/null +++ b/modules/programs/browser/foxwrappers.nix @@ -0,0 +1,25 @@ +{inputs, ...}: let + mkFirefoxModule = import "${inputs.home-manager.outPath}/modules/programs/firefox/mkFirefoxModule.nix"; +in { + imports = [ + (mkFirefoxModule { + modulePath = [ + "programs" + "zen-browser" + ]; + name = "Zen Browser"; + wrappedPackageName = "zen-browser-unwrapped"; + unwrappedPackageName = "zen-browser"; + visible = true; + platforms = { + linux = { + vendorPath = ".zen"; + configPath = ".zen"; + }; + darwin = { + configPath = "Library/Application Support/Zen"; + }; + }; + }) + ]; +} diff --git a/modules/programs/browser/librewolf.nix b/modules/programs/browser/librewolf.nix new file mode 100644 index 0000000..9a17bda --- /dev/null +++ b/modules/programs/browser/librewolf.nix @@ -0,0 +1,29 @@ +{ + lib, + config, + options, + ... +}: { + options.mods.browser.librewolf = { + enable = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = "Enables the librwolf browser"; + }; + settings = lib.mkOption { + default = {}; + example = {}; + type = with lib.types; attrsOf anything; + description = "librewolf settings"; + }; + }; + config = lib.mkIf config.mods.browser.librewolf.enable ( + lib.optionalAttrs (options ? home.packages) { + programs.librewolf = { + enable = true; + settings = config.mods.browser.librewolf.settings; + }; + } + ); +} diff --git a/modules/programs/browser/zen.nix b/modules/programs/browser/zen.nix index 96ef32c..ced52ea 100644 --- a/modules/programs/browser/zen.nix +++ b/modules/programs/browser/zen.nix @@ -2,8 +2,8 @@ lib, config, options, - system, inputs, + pkgs, ... }: { options.mods.browser.zen = { @@ -13,11 +13,99 @@ type = lib.types.bool; description = "Enables the zen browser"; }; - # TODO configure zen + configuration = lib.mkOption { + default = { + EnableTrackingProtection = { + Value = true; + Locked = true; + Cryptomining = true; + Fingerprinting = true; + }; + DisablePocket = true; + DisplayBookmarksToolbar = "never"; + DisplayMenuBar = "default-off"; + CaptivePortal = false; + DisableFirefoxStudies = true; + DisableTelemetry = true; + DisableFirefoxAccounts = false; + NoDefaultBookmarks = true; + OfferToSaveLogins = false; + OfferToSaveLoginsDefault = false; + PasswordManagerEnabled = false; + FirefoxHome = { + Search = true; + Pocket = false; + Snippets = false; + TopSites = true; + Highlights = false; + }; + UserMessaging = { + ExtensionRecommendations = false; + SkipOnboarding = true; + }; + }; + example = {}; + type = with lib.types; attrsOf anything; + description = "Zen policy configuration. See https://mozilla.github.io/policy-templates/ for more information."; + }; + profiles = lib.mkOption { + default = [ + { + name = "${config.conf.username}"; + value = { + isDefault = true; + id = 0; + }; + } + { + name = "special"; + value = { + isDefault = false; + id = 1; + }; + } + ]; + example = [ + { + name = "custom"; + value = { + isDefault = true; + id = 0; + extensions.packages = [pkgs.nur.repos.rycee.firefox-addons.darkreader]; + }; + } + ]; + type = with lib.types; listOf (attrsOf anything); + description = "Zen profiles"; + }; }; config = lib.mkIf config.mods.browser.zen.enable ( lib.optionalAttrs (options ? home.packages) { - home.packages = [inputs.zen-browser.packages."${system}".default]; + programs.zen-browser = { + enable = true; + package = + pkgs.wrapFirefox + (inputs.zen-browser.packages.${pkgs.system}.default.overrideAttrs (prevAttrs: { + passthru = + prevAttrs.passthru + or {} + // { + applicationName = "Zen Browser"; + binaryName = "zen"; + + ffmpegSupport = true; + gssSupport = true; + gtk3 = pkgs.gtk3; + }; + })) + { + icon = "zen-beta"; + wmClass = "zen"; + hasMozSystemDirPatch = false; + }; + policies = config.mods.browser.zen.configuration; + profiles = builtins.listToAttrs config.mods.browser.zen.profiles; + }; } ); } diff --git a/modules/programs/homePackages.nix b/modules/programs/homePackages.nix index 223283d..4ca908b 100644 --- a/modules/programs/homePackages.nix +++ b/modules/programs/homePackages.nix @@ -3,7 +3,6 @@ options, config, pkgs, - inputs, ... }: let # TODO remove when chromium works again @@ -72,12 +71,14 @@ in { description = "The email client"; }; browser = lib.mkOption { - default = inputs.zen-browser.packages.${pkgs.system}.default; + default = "zen"; example = "firefox"; type = with lib.types; nullOr ( either (enum [ "firefox" + "zen" + "librewolf" ]) package ); @@ -150,11 +151,23 @@ in { profiles = builtins.listToAttrs config.mods.browser.firefox.profiles; }; } + else if config.mods.homePackages.browser == "zen" + then { + zen-browser = { + enable = true; + policies = config.mods.browser.zen.configuration; + profiles = builtins.listToAttrs config.mods.browser.zen.profiles; + }; + } + else if config.mods.homePackages.browser == "librewolf" + then { + librewolf = { + enable = true; + settings = config.mods.browser.librewolf.settings; + }; + } else {} ); - services = - if config.mods.homePackages.useDefaultPackages - then config.mods.homePackages.specialServices - else config.mods.homePackages.specialServices; + services = config.mods.homePackages.specialServices; }; } diff --git a/modules/programs/media.nix b/modules/programs/media.nix index 62080f3..207fa9c 100644 --- a/modules/programs/media.nix +++ b/modules/programs/media.nix @@ -4,8 +4,7 @@ config, pkgs, ... -}: -{ +}: { options.mods.media = { useBasePackages = lib.mkOption { default = true; @@ -14,24 +13,24 @@ description = "Default media packages (If disabled, only the additional packages will be installed)"; }; additionalPackages = lib.mkOption { - default = [ ]; - example = [ pkgs.flatpak ]; + default = []; + example = [pkgs.flatpak]; type = with lib.types; listOf package; description = '' Additional media packages. ''; }; specialPrograms = lib.mkOption { - default = { }; - example = { }; + default = {}; + example = {}; type = with lib.types; attrsOf anything; description = '' special program configuration to be added which require programs.something notation. ''; }; specialServices = lib.mkOption { - default = { }; - example = { }; + default = {}; + example = {}; type = with lib.types; attrsOf anything; description = '' special services configuration to be added which require an services.something notation. @@ -40,51 +39,47 @@ }; config = lib.optionalAttrs (options ? home.packages) { home.packages = - if config.mods.media.useBasePackages then + if config.mods.media.useBasePackages + then with pkgs; - [ - # base audio - pipewire - wireplumber - # audio control - playerctl - # images - imv - # videos - mpv - # pdf - zathura - evince - libreoffice-fresh - onlyoffice-bin - pdftk - pdfpc - polylux2pdfpc - # spotify - # video editing - kdePackages.kdenlive - # image creation - inkscape - gimp - krita - yt-dlp - ] - ++ config.mods.media.additionalPackages - else - config.mods.media.additionalPackages; + [ + # base audio + pipewire + wireplumber + # audio control + playerctl + # images + imv + # videos + mpv + # pdf + zathura + evince + libreoffice-fresh + onlyoffice-bin + pdftk + pdfpc + polylux2pdfpc + # spotify + # video editing + kdePackages.kdenlive + # image creation + inkscape + gimp + krita + yt-dlp + ] + ++ config.mods.media.additionalPackages + else config.mods.media.additionalPackages; programs = - if config.mods.media.useBasePackages then + if config.mods.media.useBasePackages + then { obs-studio.enable = true; - obs-studio.plugins = with pkgs; [ obs-studio-plugins.obs-vaapi ]; + obs-studio.plugins = with pkgs; [obs-studio-plugins.obs-vaapi]; } // config.mods.media.specialPrograms - else - config.mods.media.specialPrograms; - services = - if config.mods.media.useBasePackages then - config.mods.media.specialServices - else - config.mods.media.specialServices; + else config.mods.media.specialPrograms; + services = config.mods.media.specialServices; }; }