From 950fe603832bd073936a9bf60006339793fc9eb3 Mon Sep 17 00:00:00 2001 From: worble Date: Fri, 10 Oct 2025 23:18:42 +0100 Subject: [PATCH] add tablet modes for firefox and gnome --- configuration/modules/gnome.nix | 36 ++++--- configuration/modules/kde.nix | 2 +- devices/starlite/configuration.nix | 3 +- devices/starlite/home.nix | 1 + devices/tuxedo/home.nix | 4 +- home-manager/base/terminal.nix | 6 +- home-manager/development/helix.nix | 73 +++++++------- home-manager/firefox/default.nix | 115 ++++++++++++----------- home-manager/firefox/firefox-profile.nix | 6 +- 9 files changed, 136 insertions(+), 110 deletions(-) diff --git a/configuration/modules/gnome.nix b/configuration/modules/gnome.nix index 2806153..4577932 100644 --- a/configuration/modules/gnome.nix +++ b/configuration/modules/gnome.nix @@ -1,17 +1,27 @@ -{ pkgs, ... }: +{ pkgs, lib, ... }: +with lib; { - services.xserver.enable = true; - services.xserver.displayManager.gdm.enable = true; - services.xserver.desktopManager.gnome.enable = true; + options.gnome.tablet = mkOption { + type = types.bool; + default = false; + }; - # To disable installing GNOME's suite of applications - # and only be left with GNOME shell. - # services.gnome.core-apps.enable = false; - services.gnome.core-developer-tools.enable = false; - services.gnome.games.enable = false; - environment.gnome.excludePackages = with pkgs; [ gnome-tour gnome-user-docs ]; + config = { + services.xserver.enable = true; + services.xserver.displayManager.gdm.enable = true; + services.xserver.desktopManager.gnome.enable = true; - environment.systemPackages = with pkgs.gnomeExtensions; [ - tray-icons-reloaded - ]; + # To disable installing GNOME's suite of applications + # and only be left with GNOME shell. + # services.gnome.core-apps.enable = false; + services.gnome.core-developer-tools.enable = false; + services.gnome.games.enable = false; + environment.gnome.excludePackages = with pkgs; [ gnome-tour gnome-user-docs ]; + + environment.systemPackages = with pkgs.gnomeExtensions; [ + tray-icons-reloaded + ] ++ optionals config.gnome.tablet [ + touchup + ]; + }; } diff --git a/configuration/modules/kde.nix b/configuration/modules/kde.nix index 6d1e1ce..0e83665 100644 --- a/configuration/modules/kde.nix +++ b/configuration/modules/kde.nix @@ -30,7 +30,7 @@ in environment.plasma6.excludePackages = [ pkgs.kdePackages.discover ]; # For cursor in steam? - xdg.icons.fallbackCursorThemes = [ "breeze_cursors" ]; + # xdg.icons.fallbackCursorThemes = [ "breeze_cursors" ]; programs.partition-manager.enable = true; diff --git a/devices/starlite/configuration.nix b/devices/starlite/configuration.nix index d478c32..ce6294c 100644 --- a/devices/starlite/configuration.nix +++ b/devices/starlite/configuration.nix @@ -17,8 +17,9 @@ ../../configuration/modules/gnome.nix ]; - networking.hostName = "starlite"; # Define your hostname. + gnome.tablet = true; + networking.hostName = "starlite"; # Define your hostname. environment.systemPackages = with pkgs.gnomeExtensions; [ touchup ]; diff --git a/devices/starlite/home.nix b/devices/starlite/home.nix index 583561a..d6a7659 100644 --- a/devices/starlite/home.nix +++ b/devices/starlite/home.nix @@ -8,6 +8,7 @@ terminal.nixUpdateLocation = "/home/worble/Projects/nixos#starlite"; terminal.flakeUpdateLocation = "/home/worble/Projects/nixos"; + firefox.tablet = true; home.username = "worble"; home.homeDirectory = "/home/worble"; diff --git a/devices/tuxedo/home.nix b/devices/tuxedo/home.nix index c3c0fc5..462b0a5 100644 --- a/devices/tuxedo/home.nix +++ b/devices/tuxedo/home.nix @@ -1,4 +1,4 @@ -{ pkgs, ... }: +{ pkgs, config, ... }: { imports = [ @@ -59,7 +59,7 @@ # Let Home Manager install and manage itself. programs = { firefox = { - profiles.work = import ../../home-manager/firefox/firefox-profile.nix // { + profiles.work = (import ../../home-manager/firefox/firefox-profile.nix { tablet = config.firefox.tablet; }) // { id = 1; name = "work"; isDefault = false; diff --git a/home-manager/base/terminal.nix b/home-manager/base/terminal.nix index b436520..35e6b21 100644 --- a/home-manager/base/terminal.nix +++ b/home-manager/base/terminal.nix @@ -8,15 +8,15 @@ with lib; options.terminal = { nixUpdateLocation = mkOption { - type = lib.types.nullOr lib.types.str; + type = types.nullOr types.str; default = null; }; flakeUpdateLocation = mkOption { - type = lib.types.nullOr lib.types.str; + type = types.nullOr types.str; default = null; }; homeUpdateLocation = mkOption { - type = lib.types.nullOr lib.types.str; + type = types.nullOr types.str; default = null; }; }; diff --git a/home-manager/development/helix.nix b/home-manager/development/helix.nix index e4e7985..c7cc675 100644 --- a/home-manager/development/helix.nix +++ b/home-manager/development/helix.nix @@ -4,7 +4,7 @@ with lib; { options.helix = { fullInstall = mkOption { - type = lib.types.nullOr lib.types.bool; + type = types.bool; default = false; }; }; @@ -17,43 +17,44 @@ with lib; settings = { theme = "dracula"; }; - extraPackages = with pkgs;[ gcc ]; + extraPackages = with pkgs;[ + gcc + ] ++ (optionals config.helix.fullInstall [ + #nix + nixd + nixpkgs-fmt + + #dotnet + omnisharp-roslyn + netcoredbg + + # rust + rustfmt + clippy + rust-analyzer + lldb + + #python + ruff + + # shell + shfmt + bash-language-server + fish-lsp + + # misc + hyprls + marksman + + # web + superhtml + biome + ] ++ (with nodePackages;[ + vscode-langservers-extracted + typescript-language-server + ])); } (mkIf config.helix.fullInstall { - extraPackages = with pkgs;[ - #nix - nixd - nixpkgs-fmt - - #dotnet - omnisharp-roslyn - netcoredbg - - # rust - rustfmt - clippy - rust-analyzer - lldb - - #python - ruff - - # shell - shfmt - bash-language-server - fish-lsp - - # misc - hyprls - marksman - - # web - superhtml - biome - ] ++ (with nodePackages;[ - vscode-langservers-extracted - typescript-language-server - ]); languages = { language = [ { diff --git a/home-manager/firefox/default.nix b/home-manager/firefox/default.nix index 88c9c57..57c1f9a 100644 --- a/home-manager/firefox/default.nix +++ b/home-manager/firefox/default.nix @@ -1,63 +1,72 @@ -{ pkgs, ... }: +{ lib, config, pkgs, ... }: +with lib; { - programs = { - firefox = { - enable = true; - package = pkgs.firefox; - languagePacks = [ - "en-GB" - ]; - policies = { - "DisplayMenuBar" = true; - "ExtensionSettings" = with builtins; - let - extension = shortId: uuid: { - name = uuid; - value = { - install_url = "https://addons.mozilla.org/en-US/firefox/downloads/latest/${shortId}/latest.xpi"; - installation_mode = "normal_installed"; + options.firefox = { + tablet = mkOption { + type = types.bool; + default = false; + }; + }; + + config = { + programs = { + firefox = { + enable = true; + package = pkgs.firefox; + languagePacks = [ + "en-GB" + ]; + policies = { + "DisplayMenuBar" = if config.firefox.tablet then false else true; + "ExtensionSettings" = with builtins; + let + extension = shortId: uuid: { + name = uuid; + value = { + install_url = "https://addons.mozilla.org/en-US/firefox/downloads/latest/${shortId}/latest.xpi"; + installation_mode = "normal_installed"; + }; }; - }; - in - listToAttrs [ - # Security / Privacy - (extension "ublock-origin" "uBlock0@raymondhill.net") - (extension "keepassxc-browser" "keepassxc-browser@keepassxc.org") - (extension "cookie-autodelete" "CookieAutoDelete@kennydo.com") + in + listToAttrs [ + # Security / Privacy + (extension "ublock-origin" "uBlock0@raymondhill.net") + (extension "keepassxc-browser" "keepassxc-browser@keepassxc.org") + (extension "cookie-autodelete" "CookieAutoDelete@kennydo.com") - # Annoyances - (extension "sponsorblock" "sponsorBlocker@ajay.app") - (extension "bandcamp-player-volume-control" "{308ec088-284a-40fe-ae14-7c917526f694}") + # Annoyances + (extension "sponsorblock" "sponsorBlocker@ajay.app") + (extension "bandcamp-player-volume-control" "{308ec088-284a-40fe-ae14-7c917526f694}") - # UI / CSS - (extension "darkreader" "addon@darkreader.org") - (extension "rsspreview" "{7799824a-30fe-4c67-8b3e-7094ea203c94}") - (extension "tree-style-tab" "treestyletab@piro.sakura.ne.jp") - (extension "traduzir-paginas-web" "{036a55b4-5e72-4d05-a06c-cba2dfcc134a}") + # UI / CSS + (extension "darkreader" "addon@darkreader.org") + (extension "rsspreview" "{7799824a-30fe-4c67-8b3e-7094ea203c94}") + (extension "tree-style-tab" "treestyletab@piro.sakura.ne.jp") + (extension "traduzir-paginas-web" "{036a55b4-5e72-4d05-a06c-cba2dfcc134a}") - # Additional Functionality - (extension "betterttv" "firefox@betterttv.net") - (extension "multi-account-containers" "@testpilot-containers") - (extension "gumbo-twitch-companion" "{59a39734-1e66-452e-a7b8-cc79f72062f0}") - (extension "joplin-web-clipper" "{8419486a-54e9-11e8-9401-ac9e17909436}") - (extension "tab-reloader" "jid0-bnmfwWw2w2w4e4edvcdDbnMhdVg@jetpack") - (extension "tab-session-manager" "Tab-Session-Manager@sienori") - (extension "user-agent-string-switcher" "{a6c4a591-f1b2-4f03-b3ff-767e5bedf4e7}") - (extension "violentmonkey" "{aecec67f-0d10-4fa7-b7c7-609a2db280cf}") - ]; - # To add additional extensions, find it on addons.mozilla.org, find - # the short ID in the url (like https://addons.mozilla.org/en-US/firefox/addon/!SHORT_ID!/) - # Then, download the XPI by filling it in to the install_url template, unzip it, - # run `jq .browser_specific_settings.gecko.id manifest.json` or - # `jq .applications.gecko.id manifest.json` to get the UUID - }; + # Additional Functionality + (extension "betterttv" "firefox@betterttv.net") + (extension "multi-account-containers" "@testpilot-containers") + (extension "gumbo-twitch-companion" "{59a39734-1e66-452e-a7b8-cc79f72062f0}") + (extension "joplin-web-clipper" "{8419486a-54e9-11e8-9401-ac9e17909436}") + (extension "tab-reloader" "jid0-bnmfwWw2w2w4e4edvcdDbnMhdVg@jetpack") + (extension "tab-session-manager" "Tab-Session-Manager@sienori") + (extension "user-agent-string-switcher" "{a6c4a591-f1b2-4f03-b3ff-767e5bedf4e7}") + (extension "violentmonkey" "{aecec67f-0d10-4fa7-b7c7-609a2db280cf}") + ]; + # To add additional extensions, find it on addons.mozilla.org, find + # the short ID in the url (like https://addons.mozilla.org/en-US/firefox/addon/!SHORT_ID!/) + # Then, download the XPI by filling it in to the install_url template, unzip it, + # run `jq .browser_specific_settings.gecko.id manifest.json` or + # `jq .applications.gecko.id manifest.json` to get the UUID + }; - profiles.default = import - ./firefox-profile.nix // { - id = 0; - name = "default"; - isDefault = true; + profiles.default = (import ./firefox-profile.nix { tablet = config.firefox.tablet; }) // { + id = 0; + name = "default"; + isDefault = true; + }; }; }; }; diff --git a/home-manager/firefox/firefox-profile.nix b/home-manager/firefox/firefox-profile.nix index f98e84c..0d14414 100644 --- a/home-manager/firefox/firefox-profile.nix +++ b/home-manager/firefox/firefox-profile.nix @@ -1,3 +1,4 @@ +{ tablet }: { settings = { # data privacy @@ -17,7 +18,7 @@ # blank new tab "browser.newtabpage.enabled" = false; # compact density - "browser.uidensity" = 1; + "browser.uidensity" = if tablet then 2 else 1; # dont draw tabs in titlebar "browser.tabs.drawInTitlebar" = false; # autoscroll middleclick @@ -32,6 +33,9 @@ "widget.use-xdg-desktop-portal.file-picker" = 1; # sidebar at right "sidebar.position_start" = false; + # new sidebar + "sidebar.revamp" = if tablet then true else false; + "sidebar.verticalTabs" = if tablet then true else false; # disable pocket "extensions.pocket.enabled" = false; # browser links should be new tab