Merge branch 'trunk' into upgrade-25.11

This commit is contained in:
Primrose 2025-11-26 15:55:11 +08:00
commit 2cc0f3bd6f
Signed by: primrose
GPG key ID: 4E887A4CA9714ADA
8 changed files with 377 additions and 8 deletions

View file

@ -5,8 +5,8 @@ local cr = function() return t { "", "" } end
local i = luasnip.insert_node local i = luasnip.insert_node
local f = luasnip.function_node local f = luasnip.function_node
local function datetime() return os.date('%Y-%m-%d %H:%M:%S') 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 date() return os.date("%Y-%m-%d") end
local function quoted(s) return '"' .. s .. '"' end local function quoted(s) return '"' .. s .. '"' end
luasnip.add_snippets("typst", { 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 local haskell_snippets = require("haskell-snippets").all
luasnip.add_snippets("haskell", haskell_snippets, { key = "haskell" }) luasnip.add_snippets("haskell", haskell_snippets, { key = "haskell" })

View file

@ -56,6 +56,7 @@ in
../overlays/eepy.nix ../overlays/eepy.nix
../overlays/calibre-no-mime.nix ../overlays/calibre-no-mime.nix
../overlays/fcitx5-table-extra-taiwanese.nix ../overlays/fcitx5-table-extra-taiwanese.nix
../overlays/zen-browser.nix
../overlays/iosevka.nix ../overlays/iosevka.nix
../packages/overlay.nix ../packages/overlay.nix
@ -152,6 +153,7 @@ in
./vanadium/home/programs.nix ./vanadium/home/programs.nix
./vanadium/home/misc.nix ./vanadium/home/misc.nix
./vanadium/home/zen-browser.nix
./vanadium/home/firefox.nix ./vanadium/home/firefox.nix
./vanadium/home/xmobar.nix ./vanadium/home/xmobar.nix
@ -170,6 +172,7 @@ in
../homeModules/common/atuin.nix ../homeModules/common/atuin.nix
../homeModules/common/direnv.nix ../homeModules/common/direnv.nix
../homeModules/common/feh.nix ../homeModules/common/feh.nix
../homeModules/common/zen-browser.nix
../homeModules/common/firefox.nix ../homeModules/common/firefox.nix
../homeModules/common/fzf.nix ../homeModules/common/fzf.nix
../homeModules/common/git.nix ../homeModules/common/git.nix
@ -191,6 +194,8 @@ in
# #
(sources.agenix + "/modules/age-home.nix") (sources.agenix + "/modules/age-home.nix")
sources.wired-notify.asFlake.homeManagerModules.default sources.wired-notify.asFlake.homeManagerModules.default
sources.zen-browser.asFlake.homeModules.twilight
]; ];
} }

View file

@ -95,7 +95,7 @@ isEvolutionComposer =
] ]
isFirefox :: Query Bool isFirefox :: Query Bool
isFirefox = className =? "firefox" isFirefox = className =? "firefox" <||> className ^? "zen"
isSpotify :: Query Bool isSpotify :: Query Bool
isSpotify = isFirefox <&&> title ~? "Spotify" isSpotify = isFirefox <&&> title ~? "Spotify"
@ -112,9 +112,11 @@ isSignal = className =? "Signal"
isElement :: Query Bool isElement :: Query Bool
isElement = isFirefox <&&> title ~? "Element" isElement = isFirefox <&&> title ~? "Element"
-- This changes depending on the locale of the browser :/
isFirefoxPip :: Query Bool 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 :: Query Bool
isPavucontrol = className =? "pavucontrol" 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 `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 -- - 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 "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 :: [(KeyMask, KeySym)]
removedKeybinds = removedKeybinds =
@ -309,7 +313,7 @@ keybinds =
) )
-- Launcher -- 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" launchDmenu = "dmenu_run -i -fn \"Iosevka-14\" -nb \"#36363a\" -nf \"#e2e2e4\" -sb \"#f7f7f8\" -sf \"#36363a\" -l 10"
lock = "xscreensaver-command -lock" lock = "xscreensaver-command -lock"
in [ ((controlMask .|. altMask, xK_m), namedScratchpadAction myScratchpads "cmus" ) in [ ((controlMask .|. altMask, xK_m), namedScratchpadAction myScratchpads "cmus" )

View file

@ -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 ];
};
};
};
}

View file

@ -140,7 +140,7 @@ in
"x-scheme-handler/unknown" = "firefox.desktop"; "x-scheme-handler/unknown" = "firefox.desktop";
}; };
in in
lib.mkIf cfg.enable { lib.mkIf (cfg.enable && !config.programs.zen-browser.enable) {
enable = true; enable = true;
associations.added = associations; associations.added = associations;
defaultApplications = associations; defaultApplications = associations;

View file

@ -0,0 +1,159 @@
{
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
profiles.default = {
settings = {
"toolkit.legacyUserProfileCustomizations.stylesheets" = true;
"browser.tabs.loadInBackground" = true;
"browser.ctrlTab.sortByRecentlyUsed" = false;
"layout.css.devPixelsPerPx" = 1.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;
};
}

View file

@ -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";
}

View file

@ -368,6 +368,19 @@
"revision": "6a96aa2066d8ad945f2323b63dc217081ef51168", "revision": "6a96aa2066d8ad945f2323b63dc217081ef51168",
"url": "https://github.com/Toqozz/wired-notify/archive/6a96aa2066d8ad945f2323b63dc217081ef51168.tar.gz", "url": "https://github.com/Toqozz/wired-notify/archive/6a96aa2066d8ad945f2323b63dc217081ef51168.tar.gz",
"hash": "02b8pva12rzcciq5lavwk824xaym28igfsva4kikvd7mxs06ccwx" "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 "version": 5