{ pkgs, ... }:

{
  hm = {
    programs.firefox = {
      enable = true;
      package = pkgs.firefox-devedition;
      profiles.dev-edition-default = {
        isDefault = true;
        search = {
          force = true;
          default = "DuckDuckGo";
          privateDefault = "DuckDuckGo";
          engines = {
            "Startpage" = {
              urls = [{
                template = "https://www.startpage.com/sp/search?q=%s";
              }];
              iconUpdateUrl = "https://www.startpage.com/sp/cdn/favicons/favicon--default.ico";
              updateInterval = 24 * 60 * 60 * 1000; # every day
              definedAliases = [ "@sp" ];
            };
            "Nix Packages" = {
              urls = [{
                template = "https://search.nixos.org/packages";
                params = [
                  { name = "type"; value = "packages"; }
                  { name = "query"; value = "{searchTerms}"; }
                ];
              }];

              icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
              definedAliases = [ "@np" ];
            };
            "NixOS Wiki" = {
              urls = [{ template = "https://wiki.nixos.org/index.php?search={searchTerms}"; }];
              iconUpdateURL = "https://wiki.nixos.org/favicon.ico";
              updateInterval = 24 * 60 * 60 * 1000; # every day
              definedAliases = [ "@nw" ];
            };
            "Bing".metaData.hidden = true;
            "Google".metaData.hidden = true;
            "Amazon".metaData.hidden = true;
          };
          order = [
            "DuckDuckGo"
            "Startpage"
            "Nix Packages"
            "NixOS Wiki"
          ];
        };
        settings = {
          "services.sync.prefs.dangerously_allow_arbitrary" = true;
          "signon.rememberSignons" = false;
          "toolkit.legacyUserProfileCustomizations.stylesheets" = true;
          # Privacy settings generated by ffprofile.com
          "app.normandy.api_url" = "";
          "app.normandy.enabled" = false;
          "app.shield.optoutstudies.enabled" = false;
          "beacon.enabled" = false;
          "breakpad.reportURL" = "";
          "browser.aboutConfig.showWarning" = false;
          "browser.cache.offline.enable" = false;
          "browser.crashReports.unsubmittedCheck.autoSubmit" = false;
          "browser.crashReports.unsubmittedCheck.autoSubmit2" = false;
          "browser.crashReports.unsubmittedCheck.enabled" = false;
          "browser.disableResetPrompt" = true;
          "browser.fixup.alternate.enabled" = false;
          "browser.newtab.preload" = false;
          "browser.newtabpage.activity-stream.section.highlights.includePocket" = false;
          "browser.newtabpage.enhanced" = false;
          "browser.newtabpage.introShown" = true;
          "browser.safebrowsing.appRepURL" = "";
          "browser.safebrowsing.blockedURIs.enabled" = false;
          "browser.safebrowsing.downloads.enabled" = false;
          "browser.safebrowsing.downloads.remote.enabled" = false;
          "browser.safebrowsing.downloads.remote.url" = "";
          "browser.safebrowsing.enabled" = false;
          "browser.safebrowsing.malware.enabled" = false;
          "browser.safebrowsing.phishing.enabled" = false;
          "browser.selfsupport.url" = "";
          "browser.send_pings" = false;
          "browser.sessionstore.privacy_level" = 0;
          "browser.shell.checkDefaultBrowser" = false;
          "browser.startup.homepage_override.mstone" = "ignore";
          "browser.tabs.crashReporting.sendReport" = false;
          "browser.urlbar.groupLabels.enabled" = false;
          "browser.urlbar.quicksuggest.enabled" = false;
          "browser.urlbar.speculativeConnect.enabled" = false;
          "browser.urlbar.trimURLs" = false;
          "datareporting.healthreport.service.enabled" = false;
          "datareporting.healthreport.uploadEnabled" = false;
          "datareporting.policy.dataSubmissionEnabled" = false;
          "device.sensors.ambientLight.enabled" = false;
          "device.sensors.enabled" = false;
          "device.sensors.motion.enabled" = false;
          "device.sensors.orientation.enabled" = false;
          "device.sensors.proximity.enabled" = false;
          "dom.battery.enabled" = false;
          "dom.security.https_only_mode" = true;
          "dom.security.https_only_mode_ever_enabled" = true;
          "dom.webaudio.enabled" = false;
          "dom.private-attribution.submission.enabled" = false;
          "experiments.activeExperiment" = false;
          "experiments.enabled" = false;
          "experiments.manifest.uri" = false;
          "experiments.supported" = false;
          "extensions.getAddons.cache.enabled" = false;
          "extensions.getAddons.showPane" = false;
          "extensions.greasemonkey.stats.optedin" = false;
          "extensions.greasemonkey.stats.url" = "";
          "extensions.pocket.enabled" = false;
          "extensions.shield-recipe-client.api_url" = "";
          "extensions.shield-recipe-client.enabled" = false;
          "extensions.webservice.discoverURL" = "";
          "media.autoplay.default" = 0;
          "media.autoplay.enabled" = true;
          "media.navigator.enabled" = false;
          "media.video_stats.enabled" = false;
          "network.allow-experiments" = false;
          "network.cookie.cookieBehavior" = 1;
          "network.dns.disablePrefetch" = true;
          "network.dns.disablePrefetchFromHTTPS" = true;
          "network.http.referer.spoofSource" = true;
          "network.http.speculative-parallel-limit" = 0;
          "network.predictor.enable-prefetch" = false;
          "network.predictor.enabled" = false;
          "network.prefetch-next" = false;
          "network.trr.mode" = 5;
          "privacy.donottrackheader.enabled" = true;
          "privacy.donottrackheader.value" = 1;
          "privacy.query_stripping" = true;
          "privacy.trackingprotection.cryptomining.enabled" = true;
          "privacy.trackingprotection.enabled" = true;
          "privacy.trackingprotection.fingerprinting.enabled" = true;
          "privacy.trackingprotection.pbmode.enabled" = true;
          "privacy.usercontext.about_newtab_segregation.enabled" = true;
          "security.ssl.disable_session_identifiers" = true;
          "services.sync.prefs.sync.browser.newtabpage.activity-stream.showSponsoredTopSite" = false;
          "signon.autofillForms" = false;
          "toolkit.telemetry.archive.enabled" = false;
          "toolkit.telemetry.bhrPing.enabled" = false;
          "toolkit.telemetry.cachedClientID" = "";
          "toolkit.telemetry.enabled" = false;
          "toolkit.telemetry.firstShutdownPing.enabled" = false;
          "toolkit.telemetry.hybridContent.enabled" = false;
          "toolkit.telemetry.newProfilePing.enabled" = false;
          "toolkit.telemetry.prompted" = 2;
          "toolkit.telemetry.rejected" = true;
          "toolkit.telemetry.reportingpolicy.firstRun" = false;
          "toolkit.telemetry.server" = "";
          "toolkit.telemetry.shutdownPingSender.enabled" = false;
          "toolkit.telemetry.unified" = false;
          "toolkit.telemetry.unifiedIsOptIn" = false;
          "toolkit.telemetry.updatePing.enabled" = false;
          # Browser UI customization
          "browser.download.autohideButton" = false;
          "browser.toolbars.bookmarks.visibility" = "always";
          "browser.newtabpage.activity-stream.showSponsoredTopSites" = false;
          "browser.newtabpage.activity-stream.topSitesRows" = 2;
          "browser.sessionstore.resume_session_once" = true;
          "general.autoScroll" = false;
          "browser.translations.automaticallyPopup" = false;
        };
        userChrome = ''
          @media (prefers-color-scheme:dark){
             :root{
                --bg: #1a1b26;

                --urlbar-bg: #0d0d15;
                --urlbar-border-top: #000;
                --urldrop-bg: #0d0d15;
                --urlbar-border-bottom: #404040;
                --urlbar-height: 30px;
                --urlbar-outline: #414868;

                --fullscreen-warn: rgb(25,25,25);

                --arrowpanel-background: var(--urlbar-bg) !important;
                --button-hover-bgcolor: rgba(159, 159, 159, 0.35) !important;
                --button-active-bgcolor: rgba(255, 255, 255, .2) !important;
                --button-bgcolor: rgba(117, 117, 117, 0.9) !important;
                --toolbarbutton-icon-fill-opacity: 0.8 !important;
                --arrowpanel-border-color: rgb(55, 55, 55) !important;
                --identity-btn-hover-color: rgba(117,117,117) !important;

                --dark-menu-background-color: rgba(34, 34, 36, .5) !important;
                --dark-menu-border-color: rgb(55, 55, 55) !important;
                --dark-menuitem-hover-background-color: rgba(159, 159, 159, 0.35) !important;
             }
          }

          @media (prefers-color-scheme:light){
             :root{
                --bg: #f1f5f9;
   
                --urlbar-bg: #cbd5e1;
                --urlbar-border-top: #9ca3af;
                --urlbar-border-bottom: #fff;
                --urldrop-bg: #cbd5e1;
                --urlbar-outline: #94a3b8;

                --fullscreen-warn: rgb(25,25,25);

                --arrowpanel-background: #e2e8f0 !important;
                --button-hover-bgcolor: #9699a3 !important;
                --button-hover-bgcolor: #cbd5e1 !important;
                --button-active-bgcolor: #cbd5e1 !important;
                --identity-btn-hover-color: white !important;
             }
          }

           /* Suppress Connecting/Waiting/Reading/Transerring */
           /* #statuspanel[type="status"] {
             display: none !important;
           } */
           /* Suppress Link Destination Overlay */
           /* #statuspanel[type="overLink"] {
             display: none !important;
           } */

          /* URL BAR */
          #urlbar {
             border-radius: 30px !important;
             border: 0 !important;
          }

          #urlbar:not(.megabar):not([focused="true"]):hover {
            outline: 1px solid var(--urlbar-outline) !important;
          }

          #urlbar[focused="true"] {
             border: 0 !important;
             border-top: 1px solid var(--urlbar-border-top) !important;
             border-bottom: 1px solid var(--urlbar-border-bottom) !important;
             border-radius: 30px !important;
          }

          #urlbar[breakout][breakout-extend]{
             border: none !important;
             box-shadow: rgba(0, 0, 0, 0.09) 0px 2px 1px, rgba(0, 0, 0, 0.09) 0px 4px 2px,
                rgba(0, 0, 0, 0.09) 0px 8px 4px, rgba(0, 0, 0, 0.09) 0px 16px 8px,
                rgba(0, 0, 0, 0.09) 0px 32px 16px !important;
             top: calc(
                (var(--urlbar-toolbar-height) - var(--urlbar-height)) / 2 ) !important;
             left: 0 !important;
             width: 100% !important;
          }

          #urlbar-container{
             margin-top: 3px;
             display: initial;
          }

          #urlbar-background {
             box-shadow: none !important;
             border-radius: 30px !important;
             background: var(--urlbar-bg) !important;  
          }

          #urlbar[focused="true"] #urlbar-background{
             box-shadow: inset 1px 1px 1px 0px rgba(0, 0, 0, 0.35) !important;
             outline: none !important;
          }

          #wrapper-urlbar-container #urlbar {
            height: var(--urlbar-height) !important;
          }

           /* Active Address/Search Field Dropdown */
          #urlbar[breakout][breakout-extend] > #urlbar-background {
             outline: none !important;
             box-shadow: none !important;
             background: var(--urldrop-bg) !important;
             border-radius: 15px !important;
          }

          #urlbar[breakout][breakout-extend] > #urlbar-input-container,
          #urlbar-input-container {
            height: var(--urlbar-height) !important;
            padding-block: 0px !important;
            padding-inline: 0px !important;
            transition: none !important;
          }

          /* Idendity icon button */
          #identity-icon-box.identity-box-button{
             margin: 3px 0 3px 3px;
             border-radius: 14px !important;
             background-color: var(--bg) !important;
             opacity: 0.8
          }

          #identity-icon-box.identity-box-button:hover{
             cursor: pointer;  
             background-color: var(--identity-btn-hover-color) !important;
          }

          /* Track protection icon */
          #tracking-protection-icon-container{
             border-radius: 16px !important;
          }

          #tracking-protection-icon-container:hover{
             cursor: pointer !important;
          }

          /* Star button */
          #star-button-box{
             border-radius: 16px !important;
          }

          #star-button-box{
             cursor: pointer !important;
          }

           /* | Borders | */
 
           .tabbrowser-tab::after {
              border: 0 !important;
           }
           .titlebar-spacer[type="pre-tabs"] {
              border: 0 !important;
           }
           #navigator-toolbox {
              border: 1 !important;
           }
 
           .titlebar-spacer[type="pre-tabs"] {
              border: 0 !important;
           }
 
           .tabbrowser-tab::after {
              border: 0 !important;
           }
 
           #urlbar-background {
              border: 0 !important;
           }
 
          #urlbar[open] > .urlbarView > .urlbarView-body-outer > .urlbarView-body-inner {
               border-top: 0 !important;
           }

 
           /* Active Tab */
           :root:not([lwt-default-theme-in-dark-mode]) .tab-background[selected],
           .tab-background[multiselected="true"] {	
              background: rgba(0,0,0,.05) !important;
           }
 
           :root[lwt-default-theme-in-dark-mode] .tab-background[selected],
           .tab-background[multiselected="true"] {	
              background: rgba(0,0,0,.2) !important;
           }
 
 
           /* Navigation Bar */
          #nav-bar {
             background-color: var(--bg) !important;
           }

           /* Bookmarks Bar */
          #PersonalToolbar {
              background-color: var(--bg) !important;
           }

           /* Navigation Bar Separator */
          #navigator-toolbox {
             border-color:var(--bg) !important;
           }
 
           /* Navigation bar Buttons */
           toolbarbutton:hover{
             cursor: pointer;
          }

           /* Show Tab close button on hover */
          .tabbrowser-tab:not([pinned]) .tab-close-button {
            display: -moz-box !important;
            opacity: 0;
            visibility: collapse !important;
            transition: opacity 0.25s, visibility 0.25s ease-in !important;
          }
          .tabbrowser-tab:not([pinned]):hover .tab-close-button {
            opacity: 1;
            visibility: visible !important;
            border-radius: 3px 3px 3px 3px !important;
          }

          /* Show URL buttons on Hover */
             #nav-bar:not([customizing="true"])
            > #nav-bar-customization-target
            > #urlbar-container:not(:hover)
            > #urlbar:not([focused])
            > #urlbar-input-container
            > #page-action-buttons {
            opacity: 0;
          }
          #page-action-buttons {
            transition: opacity 0.15s ease;
          }
          #nav-bar:not([customizing="true"])
            > #nav-bar-customization-target
            > #urlbar-container:not(:hover)
            > #urlbar:not([focused])
            > #urlbar-input-container
            > #tracking-protection-icon-container {
            opacity: 0;
          }
          #tracking-protection-icon-container {
            transition: opacity 0.15s ease;
          }


          /*Full Screen Warning*/

          #fullscreen-warning{
             background-color: var(--fullscreen-warn) !important;
             border-color: var(--fullscreen-warn) !important;
             max-width: 500px !important;
             max-height: 50px !important;
             border-radius: 50px !important;
             font-size: 12px !important;
             opacity: 0.8 !important;
          }

          .pointerlockfswarning-generic-text,
          .pointerlockfswarning-domain-text{
              font-size: 15px !important;
              color: rgb(255,255,255) !important;
              text-shadow: none !important;
          }


          /* Uncomment to Hide tabs bar for Tree style tabs (Credit u/jfgxyz on Reddit) */
          toolbar#TabsToolbar {
              height: 0px;
              min-height: 0 !important;
              background-color: var(--bg) !important;     
          }
          .toolbar-items {
             visibility: collapse;
          }

          /* ----- Move menu buttons ----- */
          /* :root {
             --toolbar-start-end-padding: 2px !important; 
          } */

          #nav-bar #PanelUI-button {
              -moz-box-ordinal-group: 0 !important;
          }
   
          #nav-bar #PanelUI-button #PanelUI-menu-button {
             margin-right: 2px !important;
             margin-left: 2px !important;
          }

          /* toolbar:not([customizing]) > #nav-bar-overflow-button {
             -moz-box-ordinal-group: 1 !important;
          }

          toolbar:not([customizing]) > #nav-bar-customization-target {
             -moz-box-ordinal-group: 2 !important;
          } */
  
          /* ----- Close/min/max fix ----- */
          /* Fix popup position */
          #appMenu-popup {margin-inline: -244px !important;} 

          #nav-bar { 
              padding-left: 0px !important;
              padding-right: 118px !important;
              position: static !important;
          } 

          #navigator-toolbox:not([inFullscreen]) #TabsToolbar 
          .titlebar-buttonbox-container {
           visibility: visible !important;
            display: block  !important;
            position: absolute !important;
            top: 1px !important;
            left: unset !important;
            right: 0 !important; 
          }

          #TabsToolbar .titlebar-min {
             -moz-box-ordinal-group:0 !important;
          }

          #TabsToolbar .titlebar-max, .titlebar-restore {
              -moz-box-ordinal-group:1 !important;
          }

          #TabsToolbar .titlebar-close {
             -moz-box-ordinal-group:2 !important;
          }

          #navigator-toolbox[inFullscreen] #navigator-toolbox #TabsToolbar .titlebar-buttonbox-container {
             -moz-box-ordinal-group: 1 !important;
           }

          #navigator-toolbox #TabsToolbar .titlebar-buttonbox-container {
             -moz-box-ordinal-group: 1 !important;
          }

          @media only screen and (max-width: 670px) {
             #main-window #navigator-toolbox:not([inFullscreen]) #TabsToolbar .titlebar-buttonbox-container {
                visibility: visible !important;
                position: relative !important;
                display: block !important;
             }
             #main-window #navigator-toolbox:not([inFullscreen]) #nav-bar {
                padding-right: initial !important;
             }
             #TabsToolbar.browser-toolbar{
                display: flex !important;
                justify-content: flex-end !important;
             }

          }

          #toolbar-menubar{
             /* menubar bg color */
             background-color: var(--bg) !important;
          }


          /* Line up the Windows controls with the rest of the icons in the toolbar. */
          :root:not([sizemode="maximized"]) .titlebar-buttonbox-container {
             padding-top: 3px;
          }

          .titlebar-buttonbox {
             z-index:3 !important;
             padding-right:3px;
          }

          .titlebar-buttonbox * {
             border-radius: 5px;
             width:35px;
             height:38px;
          }

          /* SIDEBERY */

          /* hides the sidebar header */
          #sidebar-header {
          	display: none !important;
          }

          .tab[selected="true"] {
          	visibility: collapse;
          	height: 0px;
          }

          .tabbrowser-tab {
          	visibility: collapse;
          	height: 0px;
          }

          .tabbrowser-tab[visuallyselected="true"] {
          	visibility: collapse;
          	height: 0px;
          }

          /* AUTO HIDE SIDE BAR */

          #sidebar-box {
          	--uc-sidebar-width: 44px; 
          	--uc-sidebar-hover-width: 260px;
          	--uc-autohide-sidebar-delay: 1ms; /* Waiting time before hiding sidebar */
          	position: relative;
          	min-width: var(--uc-sidebar-width) !important;
          	width: var(--uc-sidebar-width) !important;
          	max-width: var(--uc-sidebar-width) !important;
          	z-index: 100;
          }

          #sidebar-box[positionend] {
          	direction: rtl;
          }
          #sidebar-box[positionend] > * {
          	direction: ltr;
          }

          #sidebar-box[positionend]:-moz-locale-dir(rtl) {
          	direction: ltr;
          }
          #sidebar-box[positionend]:-moz-locale-dir(rtl) > * {
          	direction: rtl;
          }

          /* HIDE SIDE BAR IN FULL SCREEN */
          #main-window[inFullscreen="true"] #sidebar-box {
          	--uc-sidebar-width: 0px;
          }

          #sidebar-splitter {
          	display: none;
          }

          #sidebar-header {
          	overflow: hidden;
          	color: var(--bg) !important;
          }

          #sidebar {
          	transition: min-width 115ms linear var(--uc-autohide-sidebar-delay) !important;
          	min-width: var(--uc-sidebar-width) !important;
          	will-change: min-width;
          }

          #sidebar-box:hover > #sidebar {
          	min-width: var(--uc-sidebar-hover-width) !important;
          	transition-delay: 0ms !important;
          }

          .sidebar-panel {
          	background-color: transparent !important;
          	color: var(--newtab-text-primary-color) !important;
          }

          .sidebar-panel #search-box {
          	-moz-appearance: none !important;
          	background-color: rgba(249, 249, 250, 0.1) !important;
          	color: inherit !important;
          }

          /* Add sidebar divider and give it background */

          #sidebar,
          #sidebar-header {
          	background-color: inherit !important;
          /* 	border-inline: 1px solid rgb(80, 80, 80); */
          	border-inline-width: 0px 1px;
          }

          #sidebar-box:not([positionend]) > :-moz-locale-dir(rtl),
          #sidebar-box[positionend] > * {
          	border-inline-width: 1px 0px;
          }

          /* Move statuspanel to the other side when sidebar is hovered so it doesn't get covered by sidebar */

          #sidebar-box:not([positionend]):hover ~ #appcontent #statuspanel {
          	inset-inline: auto 0px !important;
          }
          #sidebar-box:not([positionend]):hover ~ #appcontent #statuspanel-label {
          	margin-inline: 0px !important;
          	border-left-style: solid !important;
          }
        '';
      };
    };
    home.packages = with pkgs; [
      vivaldi
      vivaldi-ffmpeg-codecs
    ];
  };
}
