diff --git a/.config/nvim/plugin/luasnip.lua b/.config/nvim/plugin/luasnip.lua index bd6ab457..65fe4532 100644 --- a/.config/nvim/plugin/luasnip.lua +++ b/.config/nvim/plugin/luasnip.lua @@ -5,8 +5,8 @@ local cr = function() return t { "", "" } end local i = luasnip.insert_node local f = luasnip.function_node -local function datetime() return os.date('%Y-%m-%d %H:%M:%S') end -local function date() return os.date('%Y-%m-%d') end +local function datetime() return os.date("%Y-%m-%d %H:%M:%S") end +local function date() return os.date("%Y-%m-%d") end local function quoted(s) return '"' .. s .. '"' end luasnip.add_snippets("typst", { @@ -57,5 +57,9 @@ luasnip.add_snippets("ruler", { }), }) +luasnip.add_snippets("nix", { + s("system", { t("stdenv.hostPlatform.system") }), +}) + local haskell_snippets = require("haskell-snippets").all luasnip.add_snippets("haskell", haskell_snippets, { key = "haskell" }) diff --git a/nix/configurations/vanadium.nix b/nix/configurations/vanadium.nix index 80919604..7234fbdf 100644 --- a/nix/configurations/vanadium.nix +++ b/nix/configurations/vanadium.nix @@ -56,6 +56,7 @@ in ../overlays/eepy.nix ../overlays/calibre-no-mime.nix ../overlays/fcitx5-table-extra-taiwanese.nix + ../overlays/zen-browser.nix ../overlays/iosevka.nix ../packages/overlay.nix @@ -152,6 +153,7 @@ in ./vanadium/home/programs.nix ./vanadium/home/misc.nix + ./vanadium/home/zen-browser.nix ./vanadium/home/firefox.nix ./vanadium/home/xmobar.nix @@ -170,6 +172,7 @@ in ../homeModules/common/atuin.nix ../homeModules/common/direnv.nix ../homeModules/common/feh.nix + ../homeModules/common/zen-browser.nix ../homeModules/common/firefox.nix ../homeModules/common/fzf.nix ../homeModules/common/git.nix @@ -191,6 +194,8 @@ in # (sources.agenix + "/modules/age-home.nix") sources.wired-notify.asFlake.homeManagerModules.default + + sources.zen-browser.asFlake.homeModules.twilight ]; } diff --git a/nix/configurations/vanadium/home/firefox.nix b/nix/configurations/vanadium/home/firefox.nix index aab6da3f..6edc85cb 100644 --- a/nix/configurations/vanadium/home/firefox.nix +++ b/nix/configurations/vanadium/home/firefox.nix @@ -8,7 +8,7 @@ let in { programs.firefox = { - enable = true; + enable = false; policies.SearchEngines.Add = [ # Forges diff --git a/nix/configurations/vanadium/home/xmonad/xmonad.hs b/nix/configurations/vanadium/home/xmonad/xmonad.hs index a41e765d..76182ee5 100644 --- a/nix/configurations/vanadium/home/xmonad/xmonad.hs +++ b/nix/configurations/vanadium/home/xmonad/xmonad.hs @@ -95,7 +95,7 @@ isEvolutionComposer = ] isFirefox :: Query Bool -isFirefox = className =? "firefox" +isFirefox = className =? "firefox" <||> className ^? "zen" isSpotify :: Query Bool isSpotify = isFirefox <&&> title ~? "Spotify" @@ -112,9 +112,11 @@ isSignal = className =? "Signal" isElement :: Query Bool isElement = isFirefox <&&> title ~? "Element" --- This changes depending on the locale of the browser :/ isFirefoxPip :: Query Bool -isFirefoxPip = isFirefox <&&> title =? "Incrustation vidéo" +isFirefoxPip = + isFirefox + -- This changes depending on the locale of the browser :/ + <&&> (title =? "Incrustation vidéo" <||> title =? "Picture-in-Picture") isPavucontrol :: Query Bool isPavucontrol = className =? "pavucontrol" @@ -223,7 +225,9 @@ myStartupHook = do -- - setting `home.sessionVariable` (home-manager) would only effect shells, probably due to the order of launched processes blah blah -- - setting `environment.sessionVariables` (NixOS) would make my set up less portable putEnv "GLFW_IM_MODULE=ibus" -- Make sure kitty knows how to talk to fcitx - putEnv "MOZ_USE_XINPUT2=1" -- Force touchpad for firefox + + -- TODO: doesn't work for firefox nor for zen since 145.0 + -- putEnv "MOZ_USE_XINPUT2=1" -- Force touchpad for firefox removedKeybinds :: [(KeyMask, KeySym)] removedKeybinds = @@ -309,7 +313,7 @@ keybinds = ) -- Launcher - ++ (let launchFirefox = "if type firefox; then firefox; else firefox-esr; fi" + ++ (let launchFirefox = "zen" launchDmenu = "dmenu_run -i -fn \"Iosevka-14\" -nb \"#36363a\" -nf \"#e2e2e4\" -sb \"#f7f7f8\" -sf \"#36363a\" -l 10" lock = "xscreensaver-command -lock" in [ ((controlMask .|. altMask, xK_m), namedScratchpadAction myScratchpads "cmus" ) diff --git a/nix/configurations/vanadium/home/zen-browser.nix b/nix/configurations/vanadium/home/zen-browser.nix new file mode 100644 index 00000000..beee8d6a --- /dev/null +++ b/nix/configurations/vanadium/home/zen-browser.nix @@ -0,0 +1,165 @@ +{ + pkgs, + config, + ... +}: +let + inherit (pkgs) nur; +in +{ + programs.zen-browser = { + enable = true; + + policies.SearchEngines.Add = [ + # Forges + { + Name = "GitHub"; + Alias = "@gh"; + IconURL = "https://github.com/favicon.ico"; + Description = "Your code yum yum"; + URLTemplate = "https://github.com/search?q={searchTerms}&type=repositories"; + } + { + Name = "GitHub (Code Search)"; + Alias = "@ghc"; + IconURL = "https://github.com/favicon.ico"; + Description = "Your code yum yum"; + URLTemplate = "https://github.com/search?q={searchTerms}&type=code"; + } + { + Name = "Codeberg"; + Alias = "@cb"; + IconURL = "https://codeberg.org/favicon.ico"; + Description = "Software development, but free!"; + URLTemplate = "https://codeberg.org/explore/repos?q={searchTerms}"; + } + { + Name = "?C"; + Alias = "@cc"; + IconURL = "https://git.confusedcompiler.org/favicon.ico"; + URLTemplate = "https://git.confusedcompiler.org/explore/repos?q={searchTerms}"; + } + + # Nix{,OS,pkgs} + { + Name = "NixOS Search (Package)"; + Alias = "@np"; + IconURL = "https://nixos.org/favicon.ico"; + Description = "Search in nixpkgs"; + URLTemplate = "https://search.nixos.org/packages?query={searchTerms}"; + } + { + Name = "NixOS Search (Options)"; + Alias = "@no"; + IconURL = "https://nixos.org/favicon.ico"; + Description = "Search in NixOS options"; + URLTemplate = "https://search.nixos.org/options?query={searchTerms}"; + } + + # Haskell + { + Name = "Flora"; + Alias = "@hs"; + IconURL = "https://flora.pm/static/icons/favicon-32x32.png"; + URLTemplate = "https://flora.pm/search?q={searchTerms}"; + } + + # Discourse + { + Name = "NixOS Discourse"; + Alias = "@nd"; + IconURL = "https://nixos.org/favicon.ico"; + URLTemplate = "https://discourse.nixos.org/search?q={searchTerms}"; + } + { + Name = "Framework Discourse"; + Alias = "@fd"; + IconURL = "https://frame.work/favicon.ico"; + URLTemplate = "https://community.frame.work/search?q={searchTerms}"; + } + + # Misc + { + Name = "YouTube"; + Alias = "@yt"; + IconURL = "https://youtube.com/favicon.ico"; + SuggestURLTemplate = "http://suggestqueries.google.com/complete/search?q={searchTerms}&ds=yt"; + URLTemplate = "https://www.youtube.com/results?search_query={searchTerms}"; + } + { + Name = "Genius"; + Alias = "@geni"; + IconURL = "https://genius.com/favicon.ico"; + URLTemplate = "https://genius.com/search?q={searchTerms}"; + } + ]; + + profiles = { + default = { + settings = { + # "full-screen-api.ignore-widgets" = true; # limit fullscreen mode to window + }; + userChrome = '' + /* monofont tweak */ + #statuspanel-label { + font-family: monospace; + } + .urlbar-input-box { + font-family: monospace; + } + ''; + extensions.packages = + let + addons = nur.repos.rycee.firefox-addons; + in + [ + addons.sponsorblock + addons.return-youtube-dislikes + addons.consent-o-matic + ]; + }; + + junk = { + id = 1; + inherit (config.programs.zen-browser.profiles.default) + settings + userChrome + ; + + extensions.packages = + let + addons = nur.repos.rycee.firefox-addons; + in + [ addons.multi-account-containers ]; + + containers = { + raisin = { + color = "purple"; + icon = "fruit"; + id = 1; + }; + pomme = { + color = "red"; + icon = "fruit"; + id = 2; + }; + }; + }; + + # Isolate it because it's proprietary + tampermonkey = { + id = 2; + inherit (config.programs.zen-browser.profiles.default) + settings + userChrome + ; + + extensions.packages = + let + addons = nur.repos.rycee.firefox-addons; + in + [ addons.tampermonkey ]; + }; + }; + }; +} diff --git a/nix/homeModules/common/firefox.nix b/nix/homeModules/common/firefox.nix index d479571b..853888c9 100644 --- a/nix/homeModules/common/firefox.nix +++ b/nix/homeModules/common/firefox.nix @@ -140,7 +140,7 @@ in "x-scheme-handler/unknown" = "firefox.desktop"; }; in - lib.mkIf cfg.enable { + lib.mkIf (cfg.enable && !config.programs.zen-browser.enable) { enable = true; associations.added = associations; defaultApplications = associations; diff --git a/nix/homeModules/common/zen-browser.nix b/nix/homeModules/common/zen-browser.nix new file mode 100644 index 00000000..4b8227ea --- /dev/null +++ b/nix/homeModules/common/zen-browser.nix @@ -0,0 +1,167 @@ +{ + pkgs, + config, + lib, + ... +}: +let + inherit (pkgs) nur; + + cfg = config.programs.zen-browser; +in +{ + programs.zen-browser = { + # https://mozilla.github.io/policy-templates + # The following have more complex logic, keep them as policies and not profiles + policies = { + RequestedLocales = [ + "fr-FR" # for fuck sake stop showing me translated version of French gov sites + "zh-TW" + "en-US" + ]; + + SearchEngines = { + Remove = [ + "Google" + "Bing" + "DuckDuckGo" + "Qwant" + "eBay" + "Perplexity" + ]; + Default = "Brave"; + Add = [ + { + Name = "Brave"; + Alias = "@br"; + URLTemplate = "https://search.brave.com/search?q={searchTerms}&source=web"; + SuggestURLTemplate = "https://suggestqueries.google.com/complete/search?q={searchTerms}"; + } + ]; + }; + NoDefaultBookmarks = true; + DisplayMenuBar = "never"; + DisplayBookmarksToolbar = "never"; + DNSOverHTTPS = { + Enabled = false; + }; + }; + + # https://searchfox.org/mozilla-central/source/browser/components/enterprisepolicies/Policies.sys.mjs + # Some policies can be rewritten to profiles configuration + # + # TODO: try out the "locked" semantic from zen + # https://github.com/0xc000022070/zen-browser-flake/tree/main#preferences + # + # To check which option is mapped to which about:config + # - back preference file + # cp .zen/default/prefs.js{,.bk} + # - click the buttons + # - diff it + # diff .zen/default/prefs.js{.bk,} + profiles.default = { + settings = { + "toolkit.legacyUserProfileCustomizations.stylesheets" = true; + "browser.tabs.loadInBackground" = true; + "browser.ctrlTab.sortByRecentlyUsed" = false; + "layout.css.devPixelsPerPx" = 1.1; + "browser.startup.page" = 1; + + # open links in new window + # this works a lot better with xmonad where I have a bunch of windows + "browser.link.open_newwindow" = 2; + + # Sponsored crap + # Yes + "browser.newtabpage.activity-stream.showSearch" = true; + "browser.newtabpage.activity-stream.feeds.topsites" = true; + # No + "browser.newtabpage.activity-stream.showSponsoredTopSites" = false; + "browser.newtabpage.activity-stream.feeds.section.highlights" = false; + "browser.newtabpage.activity-stream.feeds.system.topstories" = false; + "browser.newtabpage.activity-stream.feeds.section.topstories" = false; + "browser.newtabpage.activity-stream.showSponsored" = false; + + # URL + # Yes + "browser.urlbar.suggest.quicksuggest.nonsponsored" = true; + # No + "browser.urlbar.suggest.quicksuggest.sponsored" = false; + + # Pasword manager + "signon.rememberSignons" = false; + "services.passwordSavingEnabled" = false; + "pref.privacy.disable_button.view_passwords" = false; + + # Hardware acceleration + "layers.acceleration.disabled" = false; + + # Screenshot + "screenshots.browser.component.enabled" = true; + + # Recommendations + "browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons" = false; + "browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features" = false; + "extensions.htmlaboutaddons.recommendations.enabled" = false; # Addons + + # Onboarding + "browser.aboutwelcome.enabled" = false; + + # AI crap + "browser.ml.chat.enabled" = false; + "browser.ml.chat.page" = false; + "browser.ml.chat.shortcuts" = false; + "browser.ml.chat.sidebar" = false; + + # Prevent WebRTC leak + # https://mullvad.net/en/help/webrtc + "media.peerconnection.enabled" = false; + }; + + extensions.packages = + let + addons = nur.repos.rycee.firefox-addons; + in + [ + addons.ublock-origin + addons.privacy-badger + addons.user-agent-string-switcher + + /* + Here's to you who want to remove news feed eradicator because you find it annoying: + It is here to annoy you so it is less likely for you to be on the agency inversion path. + DO NOT REMOVE IT. I repeat, DO NOT REMOVE IT. + + If you think it's annoying, go do some jump rope, sing, live. + */ + addons.news-feed-eradicator # did you read the comment above? + addons.multi-account-containers + ]; + }; + }; + + xdg.mimeApps = + let + associations = lib.genAttrs [ + "application/x-extension-shtml" + "application/x-extension-xhtml" + "application/x-extension-html" + "application/x-extension-xht" + "application/x-extension-htm" + # "x-scheme-handler/unknown" + # "x-scheme-handler/mailto" + "x-scheme-handler/chrome" + "x-scheme-handler/about" + "x-scheme-handler/https" + "x-scheme-handler/http" + "application/xhtml+xml" + # "application/json" + # "text/plain" + "text/html" + ] (_: cfg.package.meta.desktopFileName); + in + lib.mkIf cfg.enable { + associations.added = associations; + defaultApplications = associations; + }; +} diff --git a/nix/overlays/zen-browser.nix b/nix/overlays/zen-browser.nix new file mode 100644 index 00000000..f4ffa489 --- /dev/null +++ b/nix/overlays/zen-browser.nix @@ -0,0 +1,19 @@ +let + sources = import ../../npins; +in +final: _: +let + zenpkgs = sources.zen-browser.asFlake.packages.${final.system}; +in +{ + # TODO: upstream default is broken? They default to zen-twilight + "zen-beta-unwrapped" = zenpkgs."beta-unwrapped"; + "zen-twilight-unwrapped" = zenpkgs."twilight-unwrapped"; + "zen-twilight-official-unwrapped" = zenpkgs."twilight-official-unwrapped"; + + # default + "zen-beta" = zenpkgs."beta"; + + "zen-twilight" = zenpkgs."twilight"; + "zen-twilight-official" = zenpkgs."twilight-official"; +} diff --git a/npins/sources.json b/npins/sources.json index 41eafa19..31edf218 100644 --- a/npins/sources.json +++ b/npins/sources.json @@ -368,6 +368,19 @@ "revision": "6a96aa2066d8ad945f2323b63dc217081ef51168", "url": "https://github.com/Toqozz/wired-notify/archive/6a96aa2066d8ad945f2323b63dc217081ef51168.tar.gz", "hash": "02b8pva12rzcciq5lavwk824xaym28igfsva4kikvd7mxs06ccwx" + }, + "zen-browser": { + "type": "Git", + "repository": { + "type": "GitHub", + "owner": "0xc000022070", + "repo": "zen-browser-flake" + }, + "branch": "main", + "submodules": false, + "revision": "ef951ed2d976bcd1f57a09f358fdda9fa9425018", + "url": "https://github.com/0xc000022070/zen-browser-flake/archive/ef951ed2d976bcd1f57a09f358fdda9fa9425018.tar.gz", + "hash": "1s85cxiwhzwqgbazcgv12xqdlk1nkfynv23r9zj8gip4j6pznr4z" } }, "version": 5