inputs: { config, lib, pkgs, ... }: with lib; let cfg = config.de2u; in { options.de2u = { enable = mkEnableOption "Enable de2 user stuff"; tiling = mkOption { type = types.bool; default = true; description = "Enable tiling stuff"; }; }; config = mkIf cfg.enable { colors.enable = lib.mkDefault true; fonts.enable = lib.mkDefault true; programs.chromium.enable = lib.mkDefault true; programs.firefox = { enable = lib.mkDefault true; package = lib.mkDefault (if pkgs ? librewolf then pkgs.librewolf else pkgs.firefox); extensions = lib.optionals (pkgs ? nur.repos.rycee.firefox-addons) (with pkgs.nur.repos.rycee.firefox-addons; [ darkreader bitwarden violentmonkey canvasblocker sponsorblock stylus ]); profiles.default = let customize = lib.replaceStrings (if config.colors.enable then [ "#19171a" "#201e21" "#dedede" ".urlbarView {\n display: none !important;\n}" ".tabbrowser-tab:not([pinned]) .tab-icon-image {\n display: none !important;\n}" ] else [ ]) (if config.colors.enable then [ "#${config.colors.base16.base00}" "#${config.colors.base16.base01}" "#${config.colors.base16.base05}" "" "" ] else [ ]); in { settings = { "browser.startup.homepage" = "https://wizbos.club"; # Make the browser usable, if I wanted autism privacy, I would use TOR browser. "privacy.resistFingerprinting" = false; "webgl.disabled" = false; "privacy.clearOnShutdown.history" = false; "privacy.clearOnShutdown.cookies" = false; "privacy.clearOnShutdown.sessions" = false; "privacy.clearOnShutdown.cache" = false; "places.history.enabled" = true; # Make Jitsi work sanely "media.setsinkid.enabled" = true; "privacy.webrtc.legacyGlobalIndicator" = false; "privacy.webrtc.hideGlobalIndicator" = true; # Required by SimpleFox, and good regardless "toolkit.legacyUserProfileCustomizations.stylesheets" = true; "layers.acceleration.force-enabled" = true; "gfx.webrender.all" = true; "svg.context-properties.content.enabled" = true; # Make Firefox dark, the reader is always light by default, and the GTK-inferred theme conflicts with SimpleFox (and our customizations) "extensions.activeThemeID" = "firefox-compact-dark@mozilla.org"; "reader.color_scheme" = "dark"; # LibreWolf ruins the user agent making sites unusable without RFP, so use the user agent from RFP manually. This also seems sane for compatibility when using Firefox. "general.useragent.override" = "Mozilla/5.0 (Windows NT 10.0; rv:91.0) Gecko/20100101 Firefox/91.0"; }; userChrome = customize (builtins.readFile "${inputs.simplefox}/chrome/userChrome.css"); userContent = builtins.readFile "${inputs.simplefox}/chrome/userContent.css"; }; }; programs.kitty = { enable = lib.mkDefault true; settings = { background_opacity = lib.mkDefault "1"; dynamic_background_opacity = lib.mkDefault true; allow_remote_control = lib.mkDefault true; hide_window_decorations = lib.mkDefault true; }; }; home.packages = with pkgs; [ rhythmbox gnomeExtensions.pop-shell gnomeExtensions.blur-me gnomeExtensions.remove-rounded-corners gnomeExtensions.improved-workspace-indicator gnomeExtensions.vitals gnomeExtensions.clipboard-indicator gnomeExtensions.gtk-title-bar gnomeExtensions.just-perfection gnomeExtensions.appindicator gnomeExtensions.compiz-windows-effect ]; systemd.user.sessionVariables = { MOZ_ENABLE_WAYLAND = "1"; QT_WAYLAND_DISABLE_WINDOWDECORATION = lib.mkIf cfg.tiling "1"; }; xdg.mimeApps = { enable = true; defaultApplications = let browser = if config.programs.firefox.enable then ( if config.programs.firefox.package.pname == "firefox" then "firefox.desktop" else "librewolf.desktop" ) else "chromium-browser.desktop"; in { "inode/directory" = "org.gnome.Nautilus.desktop"; "image/*" = "org.gnome.eog.desktop"; "video/*" = "org.gnome.Totem.desktop"; "text/html" = browser; "x-scheme-handler/http" = browser; "x-scheme-handler/https" = browser; "x-scheme-handler/about" = browser; "x-scheme-handler/mailto" = "org.gnome.Geary.desktop"; "application/zip" = "org.gnome.FileRoller.desktop"; "application/rar" = "org.gnome.FileRoller.desktop"; "application/7z" = "org.gnome.FileRoller.desktop"; "application/*tar" = "org.gnome.FileRoller.desktop"; }; }; dconf.settings = with lib.hm.gvariant; { "org/gnome/desktop/interface" = { enable-hot-corners = !cfg.tiling; show-battery-percentage = true; }; "org/gnome/shell/extensions/pop-shell" = { tile-by-default = cfg.tiling; show-title = !cfg.tiling; active-hint = false; }; "org/gnome/shell/extensions/improved-workspace-indicator" = { panel-position = "left"; }; "org/gnome/shell/extensions/vitals" = { hide-zeros = true; show-battery = true; update-time = 10; }; "org/gnome/shell/extensions/appindicator" = { icon-opacity = 255; tray-pos = "center"; }; "org/gnome/shell/extensions/user-theme" = { name = if config.colors.enable then "Generated" else "Default"; }; "org/gnome/shell/extensions/just-perfection" = { activities-button = !cfg.tiling; startup-status = 0; workspace-popup = false; window-picker-icon = false; animation = 3; dash = false; double-super-to-appgrid = true; }; "org/gnome/shell" = { disable-user-extensions = false; disabled-extensions = [ "" ]; enabled-extensions = [ "pop-shell@system76.com" "rrc@ogarcia.me" "native-window-placement@gnome-shell-extensions.gcampax.github.com" "user-theme@gnome-shell-extensions.gcampax.github.com" "improved-workspace-indicator@michaelaquilina.github.io" "Vitals@CoreCoding.com" "clipboard-indicator@tudmotu.com" "just-perfection-desktop@just-perfection" "appindicatorsupport@rgcjonas.gmail.com" "launch-new-instance@gnome-shell-extensions.gcampax.github.com" "gtktitlebar@velitasali.github.io" ]; }; "org/gnome/desktop/peripherals/touchpad" = { natural-scroll = false; }; "org/gnome/mutter" = { edge-tiling = !cfg.tiling; dynamic-workspaces = !cfg.tiling; }; "org/gnome/shell/extensions/gtktitlebar" = { hide-window-titlebars = "always"; }; "org/gnome/shell/extensions/blur-me" = { toggle-app-blur = false; }; "org/gnome/desktop/wm/preferences" = { focus-mode = if cfg.tiling then "sloppy" else "click"; resize-with-right-button = true; num-workspaces = 9; }; "org/gnome/maps" = { night-mode = true; transportation-type = "car"; }; "org/gnome/system/location" = { enabled = true; }; "org/gnome/desktop/wm/keybindings" = let workspaceAttrsList = lib.flatten (map (n: [ (lib.nameValuePair "move-to-workspace-${n}" [ "${n}" ]) (lib.nameValuePair "switch-to-workspace-${n}" [ "${n}" ]) ]) (map (n: toString n) (lib.range 0 9))); in lib.listToAttrs workspaceAttrsList // { minimize = [ "comma" ]; switch-to-workspace-left = [ "" ]; switch-to-workspace-right = [ "" ]; maximize = [ "" ]; unmaximize = [ "" ]; move-to-monitor-up = [ "" ]; move-to-monitor-down = [ "" ]; move-to-monitor-left = [ "" ]; move-to-monitor-right = [ "" ]; move-to-workspace-down = [ "" ]; move-to-workspace-up = [ "" ]; switch-to-workspace-down = [ "Down" "j" ]; switch-to-workspace-up = [ "Up" "k" ]; toggle-maximized = [ "m" ]; close = [ "q" ]; cycle-windows = [ "" ]; # screw alt keys cycle-windows-backward = [ "" ]; activate-window-menu = [ "" ]; }; "org/gnome/mutter/keybindings" = { toggle-tiled-left = [ "" ]; toggle-tiled-right = [ "" ]; }; "org/gnome/mutter/wayland/keybindings" = { restore-shortcuts = [ "" ]; }; "org/gnome/shell/keybindings" = { open-application-menu = [ "" ]; toggle-message-tray = [ "v" ]; toggle-overview = [ "" ]; }; "org/gnome/settings-daemon/plugins/media-keys" = { play = [ "backslash" ]; next = [ "bracketright" ]; previous = [ "bracketleft" ]; volume-down = [ "minus" ]; volume-up = [ "equal" ]; screensaver = [ "Escape" ]; home = [ "f" ]; email = [ "e" ]; www = [ "b" ]; terminal = [ "t" ]; rotate-video-lock-static = [ "" ]; area-screenshot = [ "Print" ]; area-screenshot-clip = [ "Print" ]; screenshot = [ "Print" ]; screenshot-clip = [ "Print" ]; window-screenshot = [ "Print" ]; window-screenshot-clip = [ "Print" ]; }; }; }; }