- Configure Firefox with privacy settings and extensions (Bitwarden, Plasma Integration, MetaMask, Kagi Search, uBlock Origin) - Set Kagi as default/only search engine - Add MOZ_USE_XINPUT2=1 for smooth scrolling - Create context/ directory for concise unit documentation - Create tests/ directory for test scripts - Move test-firefox-config.sh to tests/ - Update agents.md with documentation workflow guidelines - Fix syntax errors in desktop.nix and dev.nix
362 lines
15 KiB
Nix
Executable file
362 lines
15 KiB
Nix
Executable file
{ config, pkgs, pkgs-unstable, home-manager, lib, ... }:
|
|
|
|
{
|
|
|
|
users.users.jsutter = {
|
|
shell = pkgs.zsh;
|
|
isNormalUser = true;
|
|
description = "Julian Sutter";
|
|
extraGroups = [ "networkmanager" "wheel" "docker" "libvirtd" "audio" "plugdev" ];
|
|
hashedPassword = "$6$tvkhGd24G6pVOsWr$j8ZAqSnXPTGwMGmIulU5Puzqd4iKdu8eAMSFis/cPqTW6u2xGQMqPHH1W9IZwKSL6.nS7Jc/NR2VwpPosyXDH/";
|
|
openssh.authorizedKeys.keys = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBNVUh+RrcOSMRV6qysnsdPs5AyK8dSm4QhhnwgpikyI jsutter@symbiotrip.com" ];
|
|
packages = with pkgs; [
|
|
# Essential CLI tools and user utilities only
|
|
# GUI applications have been moved to appropriate desktop modules
|
|
direnv # Development environment management
|
|
appimage-run # System utility for AppImages
|
|
micro
|
|
];
|
|
};
|
|
|
|
# Everything below is home manager managed:
|
|
home-manager = {
|
|
useUserPackages = true;
|
|
backupFileExtension = "backup";
|
|
users.jsutter = {
|
|
home.username = "jsutter";
|
|
home.homeDirectory = "/home/jsutter";
|
|
programs.home-manager.enable = true;
|
|
home.stateVersion = "25.11";
|
|
|
|
# Set environment variables here
|
|
|
|
home.sessionVariables = {
|
|
OPENAI_API_KEY = "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";
|
|
SYNTHETIC_L_API_KEY = "syn_5bfe68ad3826bb7872f32fcf160e959a";
|
|
MOZ_USE_XINPUT2 = "1";
|
|
};
|
|
|
|
programs.git = {
|
|
enable = true;
|
|
settings = {
|
|
user = {
|
|
name = "Julian Sutter";
|
|
email = "jsutter@symbiotip.com";
|
|
};
|
|
core.editor = "nano";
|
|
credential.helper = "store";
|
|
init.defaultBranch = "main";
|
|
};
|
|
};
|
|
|
|
programs.go.enable= true;
|
|
|
|
programs.zed-editor = {
|
|
enable = true;
|
|
|
|
# Lets Zed update settings.json when you change agent/model settings in the UI
|
|
mutableUserSettings = true;
|
|
|
|
extensions = [
|
|
"nix"
|
|
"markdown"
|
|
"toml"
|
|
"go"
|
|
"dracula"
|
|
];
|
|
|
|
extraPackages = with pkgs; [
|
|
nixd
|
|
nil
|
|
go
|
|
gopls
|
|
];
|
|
|
|
userSettings = {
|
|
language_models = {
|
|
openai_compatible = {
|
|
SyntheticL = {
|
|
api_url = "https://api.synthetic.new/openai/v1";
|
|
available_models = [
|
|
{
|
|
name = "hf:zai-org/GLM-4.7";
|
|
display_name = "SyntheticL";
|
|
max_tokens = 198000;
|
|
}
|
|
];
|
|
};
|
|
};
|
|
};
|
|
|
|
agent = {
|
|
default_model = {
|
|
provider = "SyntheticL";
|
|
model = "hf:zai-org/GLM-4.7";
|
|
};
|
|
};
|
|
|
|
ui_metrics = {
|
|
overrides = {
|
|
button = {
|
|
padding = {
|
|
top = 8;
|
|
right = 12;
|
|
bottom = 8;
|
|
left = 12;
|
|
};
|
|
corner_radius = 8;
|
|
font_size = 14;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
programs.vscode = {
|
|
enable = true;
|
|
package = pkgs.vscodium;
|
|
profiles.default.extensions = with pkgs.vscode-extensions; [
|
|
dracula-theme.theme-dracula
|
|
yzhang.markdown-all-in-one
|
|
mkhl.direnv
|
|
golang.go
|
|
bbenoist.nix
|
|
arrterian.nix-env-selector
|
|
jnoortheen.nix-ide
|
|
|
|
saoudrizwan.claude-dev
|
|
# optional alt:
|
|
# continue.continue
|
|
];
|
|
};
|
|
|
|
programs.zsh = {
|
|
enable = true;
|
|
enableCompletion = false; # enabled in oh-my-zsh
|
|
autosuggestion.enable = true;
|
|
initContent = ''
|
|
test -f ~/.dir_colors && eval $(dircolors ~/.dir_colors)
|
|
'';
|
|
shellAliases = {
|
|
ne = "nix-env";
|
|
ni = "nix-env -iA";
|
|
no = "nixops";
|
|
ns = "nix-shell --pure";
|
|
nra = "sudo nixos-rebuild switch --flake .#aurora";
|
|
nrf = "sudo nixos-rebuild switch --flake .#framework";
|
|
nrl = "sudo nixos-rebuild switch --flake .#labrizor";
|
|
};
|
|
oh-my-zsh = {
|
|
enable = true;
|
|
plugins = [ "git" "systemd" "rsync" "kubectl" "ansible" "battery" "colored-man-pages" "colorize" "common-aliases" "cp" "docker" "docker-compose" "git-auto-fetch" "git-extras" "github" "git-prompt" "gnu-utils" "golang" "nmap" "postgres" "python" "rust" "ssh-agent" "sudo" "systemd" "ufw" "vscode" ];
|
|
theme = "terminalparty";
|
|
};
|
|
};
|
|
|
|
programs.lsd = {
|
|
enable = true;
|
|
};
|
|
|
|
programs.bat.enable = true;
|
|
|
|
programs.firefox = {
|
|
enable = true;
|
|
package = pkgs.wrapFirefox pkgs.firefox-unwrapped {
|
|
extraPolicies = {
|
|
CaptivePortal = false;
|
|
DisableFirefoxStudies = true;
|
|
DisablePocket = true;
|
|
DisableTelemetry = true;
|
|
DisableFirefoxAccounts = false;
|
|
NoDefaultBookmarks = true;
|
|
OfferToSaveLogins = false;
|
|
OfferToSaveLoginsDefault = false;
|
|
PasswordManagerEnabled = false;
|
|
DisableFormHistory = true;
|
|
FirefoxHome = {
|
|
Search = false;
|
|
Pocket = false;
|
|
Snippets = false;
|
|
TopSites = false;
|
|
Highlights = false;
|
|
Locked = {
|
|
Search = false;
|
|
Pocket = false;
|
|
Snippets = false;
|
|
TopSites = false;
|
|
Highlights = false;
|
|
};
|
|
};
|
|
UserMessaging = {
|
|
ExtensionRecommendations = false;
|
|
FeatureRecommendations = false;
|
|
SkipOnboarding = true;
|
|
MoreFromMozilla = false;
|
|
WhatsNew = false;
|
|
};
|
|
FirefoxSuggest = {
|
|
WebSuggestions = false;
|
|
SponsoredSuggestions = false;
|
|
ImprovSuggest = false;
|
|
Locked = {
|
|
WebSuggestions = false;
|
|
SponsoredSuggestions = false;
|
|
ImprovSuggest = false;
|
|
};
|
|
};
|
|
Permissions = {
|
|
Location = {
|
|
BlockNewRequests = true;
|
|
Locked = true;
|
|
};
|
|
Notifications = {
|
|
BlockNewRequests = true;
|
|
Locked = true;
|
|
};
|
|
Autoplay = {
|
|
Default = "block-audio-video";
|
|
Locked = true;
|
|
};
|
|
VirtualReality = {
|
|
BlockNewRequests = true;
|
|
Locked = true;
|
|
};
|
|
};
|
|
ExtensionSettings = {
|
|
"uBlock0@raymondhill.net" = {
|
|
installation_mode = "force_installed";
|
|
install_url = "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi";
|
|
};
|
|
"{446900e4-71c2-419f-a6a7-df9c2b2dc922}" = {
|
|
installation_mode = "force_installed";
|
|
install_url = "https://addons.mozilla.org/firefox/downloads/latest/bitwarden-password-manager/latest.xpi";
|
|
};
|
|
"plasma-browser-integration@kde.org" = {
|
|
installation_mode = "force_installed";
|
|
install_url = "https://addons.mozilla.org/firefox/downloads/latest/plasma-integration/latest.xpi";
|
|
};
|
|
"webextension@metamask.io" = {
|
|
installation_mode = "force_installed";
|
|
install_url = "https://addons.mozilla.org/firefox/downloads/latest/ether-metamask/latest.xpi";
|
|
};
|
|
"kagi-search@kagi.com" = {
|
|
installation_mode = "force_installed";
|
|
install_url = "https://addons.mozilla.org/firefox/downloads/latest/kagi-for-firefox/latest.xpi";
|
|
};
|
|
};
|
|
};
|
|
};
|
|
profiles = {
|
|
jsutter = {
|
|
id = 0;
|
|
name = "jsutter";
|
|
settings = {
|
|
"browser.ctrlTab.recentlyUsedOrder" = true;
|
|
"browser.urlbar.quicksuggest.enabled" = false;
|
|
"browser.urlbar.suggest.quicksuggest.sponsored" = false;
|
|
"browser.urlbar.suggest.quicksuggest.nonsponsored" = false;
|
|
"browser.link.preview.enabled" = false;
|
|
"browser.search.suggest.enabled" = false;
|
|
"browser.search.suggest.enabled.private" = false;
|
|
"extensions.pocket.enabled" = false;
|
|
"extensions.pocket.showHome" = false;
|
|
"browser.contentblocking.category" = "strict";
|
|
"privacy.sanitize.sanitizeOnShutdown" = true;
|
|
"privacy.clearOnShutdown.cache" = true;
|
|
"privacy.clearOnShutdown.cookies" = true;
|
|
"privacy.clearOnShutdown.downloads" = true;
|
|
"privacy.clearOnShutdown.formdata" = true;
|
|
"privacy.clearOnShutdown.history" = true;
|
|
"privacy.clearOnShutdown.sessions" = true;
|
|
"signon.rememberSignons" = false;
|
|
"dom.private-attribution.submission.enabled" = false;
|
|
"dom.battery.enabled" = false;
|
|
"browser.uitour.enabled" = false;
|
|
"browser.urlbar.trimURLs" = true;
|
|
"layout.css.prefers-color-scheme.content-override" = 0;
|
|
"browser.tabs.hoverPreview.enabled" = false;
|
|
"browser.tabs.hoverPreview.showThumbnails" = false;
|
|
"media.videocontrols.picture-in-picture.allow-multiple" = false;
|
|
"media.hardware-video-decoding.force-enabled" = true;
|
|
"widget.gtk.overlay-scrollbars.enabled" = false;
|
|
"browser.toolbars.bookmarks.visibility" = "newtab";
|
|
"browser.toolbars.toolbarbuttons.intended.icon-size" = "small";
|
|
"browser.newtabpage.enabled" = false;
|
|
"browser.startup.homepage" = "about:blank";
|
|
"browser.newtabpage.activity-stream.default.sites" = "";
|
|
"browser.search.region" = "US";
|
|
"browser.search.isUS" = true;
|
|
"layers.acceleration.force-enabled" = true;
|
|
"gfx.webrender.all" = true;
|
|
"gfx.webrender.enabled" = true;
|
|
"svg.context-properties.content.enabled" = true;
|
|
"browser.zoom.full" = true;
|
|
"ui.key.menuAccessKeyFocuses" = false;
|
|
};
|
|
search = {
|
|
default = "Kagi";
|
|
engines = {
|
|
"Kagi" = {
|
|
urls = [{ template = "https://kagi.com/search?q={searchTerms}"; }];
|
|
metaData.alias = "@kagi";
|
|
icon = "https://kagi.com/favicon.ico";
|
|
};
|
|
};
|
|
force = true;
|
|
privateDefault = "Kagi";
|
|
};
|
|
extraConfig = ''
|
|
user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true);
|
|
user_pref("full-screen-api.ignore-widgets", true);
|
|
user_pref("media.ffmpeg.vaapi.enabled", true);
|
|
user_pref("media.rdd-vpx.enabled", true);
|
|
user_pref("media.av1.enabled", true);
|
|
user_pref("media.navigator.video.use_rtt", true);
|
|
user_pref("browser.display.use_document_fonts", 1);
|
|
user_pref("browser.display.use_system_colors", false);
|
|
user_pref("browser.menu.showCharacterEncoding", false);
|
|
user_pref("browser.newtabpage.activity-stream.feeds.section.topstories.options", "");
|
|
user_pref("browser.newtabpage.activity-stream.feeds.topsites", false);
|
|
user_pref("browser.newtabpage.activity-stream.section.highlights.includePocket", false);
|
|
user_pref("browser.newtabpage.activity-stream.section.highlights.includeVisited", false);
|
|
user_pref("browser.newtabpage.activity-stream.section.highlights.includeBookmarks", false);
|
|
user_pref("browser.newtabpage.activity-stream.section.highlights.includeDownloads", false);
|
|
user_pref("browser.newtabpage.activity-stream.section.highlights.includePocket", false);
|
|
user_pref("app.shield.optoutstudies.enabled", false);
|
|
user_pref("datareporting.healthreport.uploadEnabled", false);
|
|
user_pref("datareporting.policy.dataSubmissionEnabled", false);
|
|
user_pref("experiments.activeExperiment", false);
|
|
user_pref("experiments.enabled", false);
|
|
user_pref("experiments.supported", false);
|
|
user_pref("network.cookie.cookieBehavior", 1);
|
|
user_pref("network.dns.disableIPv6", true);
|
|
user_pref("privacy.donottrackheader.enabled", true);
|
|
user_pref("privacy.resistFingerprinting", true);
|
|
user_pref("privacy.trackingprotection.enabled", true);
|
|
user_pref("privacy.trackingprotection.socialtracking.enabled", true);
|
|
user_pref("privacy.trackingprotection.fingerprinting.enabled", true);
|
|
user_pref("privacy.trackingprotection.cryptomining.enabled", true);
|
|
user_pref("privacy.userContext.enabled", true);
|
|
user_pref("privacy.userContext.longPressBehavior", 2);
|
|
user_pref("browser.urlbar.groupLabels.enabled", false);
|
|
user_pref("browser.search.widget.inNavBar", false);
|
|
user_pref("browser.search.hiddenOneOffs", "Google,Bing,DuckDuckGo,Amazon,Wikipedia,Yahoo,DDG");
|
|
user_pref("browser.search.separatePrivateDefault.ui.enabled", false);
|
|
user_pref("browser.search.suggest.enabled", false);
|
|
user_pref("browser.search.suggest.enabled.private", false);
|
|
user_pref("browser.search.order", "");
|
|
user_pref("browser.search.order.1", "");
|
|
user_pref("browser.search.order.2", "");
|
|
user_pref("browser.search.order.3", "");
|
|
user_pref("browser.search.isUS", true);
|
|
user_pref("browser.search.region", "US");
|
|
user_pref("browser.uiCustomization.state", "{\"placements\":{\"widget:[addon]bar-open\",\"nav-bar\":[\"back-button\",\"forward-button\",\"stop-reload-button\",\"urlbar-container\",\"downloads-button\",\"ublock0_raymondhill_net-browser-action\",\"_446900e4-71c2-419f-a6a7-df9c2b2dc922-browser-action\",\"plasma-browser-integration_kde_org-browser-action\",\"webextension_metamask_io-browser-action\",\"kagi-search_kagi_com-browser-action\"],\"toolbar-menubar\":[\"menubar-items\"],\"TabsToolbar\":[\"tabbrowser-tabs\",\"new-tab-button\",\"alltabs-button\"],\"PersonalToolbar\":[\"personal-bookmarks\"]},\"seen\":[\"developer-button\",\"ublock0_raymondhill_net-browser-action\",\"_446900e4-71c2-419f-a6a7-df9c2b2dc922-browser-action\",\"plasma-browser-integration_kde_org-browser-action\",\"webextension_metamask_io-browser-action\",\"kagi-search_kagi_com-browser-action\"],\"dirtyAreaCache\":[\"nav-bar\",\"toolbar-menubar\",\"TabsToolbar\",\"PersonalToolbar\"],\"currentVersion\":18,\"newElementState\":{}}");
|
|
'';
|
|
};
|
|
};
|
|
};
|
|
|
|
|
|
};
|
|
};
|
|
}
|