{ config, pkgs, hyprland, nixgl, wpaperd, ... }: let lock-false = { Value = false; Status = "locked"; }; lock-true = { Value = true; Status = "locked"; }; in { # Home Manager needs a bit of information about you and the paths it should # manage. home.username = "ryan"; home.homeDirectory = "/home/ryan"; # This value determines the Home Manager release that your configuration is # compatible with. This helps avoid breakage when a new Home Manager release # introduces backwards incompatible changes. # # You should not change this value, even if you update Home Manager. If you do # want to update the value, then make sure to first check the Home Manager # release notes. home.stateVersion = "23.11"; # Please read the comment before changing. # This value will set some environment variables to allow home-manager to # function better outside of NixOS nixpkgs.config.allowUnfree = true; #targets.genericLinux.enable = true; fonts.fontconfig.enable = true; fonts.fontconfig.defaultFonts = { monospace = [ "DejaVu Sans Mono" ]; sansSerif = [ "DejaVu Sans" ]; serif = [ "DejaVu Serif" ]; }; # wayland.windowManager.hyprland.enable = true; # Install firefox and add some customizations programs.firefox = { enable = true; policies = { EnableTrackingProtection = { Value = true; Locked = true; Cryptomining = true; Fingerprinting = true; EmailTracking = true; }; UserMessaging = { WhatsNew = false; ExtensionRecommendations = false; FeatureRecommendations = false; UrlbarInterventions = false; SkipOnboarding = true; MoreFromMozilla = false; Labs = false; Locked = true; }; DisableAppUpdate = true; DisableAccounts = true; DisableFirefoxAccounts = true; DisableFirefoxStudies = true; DisablePocket = true; DisableTelemetry = true; AutofillAddressEnabled = false; AutofillCreditCardEnabled = false; DisableMasterPasswordCreation = true; PasswordManagerEnabled = false; PrimaryPassword = false; OfferToSaveLogins = false; NoDefaultBookmarks = true; OverrideFirstRunPage = ""; OverridePostUpdatePage = ""; FirefoxHome = { Search = true; TopSites = true; SponsoredTopSites = false; Highlights = false; Pocket = false; SponsoredPocket = false; Snippets = false; Locked = true; }; SearchSuggestEnabled = true; FirefoxSuggest = { WebSuggestions = true; SponsoredSuggestions = false; ImproveSuggest = false; Locked = true; }; PictureInPicture = lock-true; HardwareAcceleration = true; Certificates = { ImportEnterpriseRoots = true; }; ExtensionSettings = { #"*".installation_mode = "blocked"; # uBlock Origin "uBlock0@raymondhill.net" = { install_url = "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi"; installation_mode = "force_installed"; }; # Bitwarden "{446900e4-71c2-419f-a6a7-df9c091e268b}" = { install_url = "https://addons.mozilla.org/firefox/downloads/latest/bitwarden-password-manager/latest.xpi"; installation_mode = "force_installed"; }; # SponsorBlock "sponsorBlocker@ajay.app" = { install_url = "https://addons.mozilla.org/firefox/downloads/latest/sponsorblock/latest.xpi"; installation_mode = "force_installed"; }; # DeArrow "deArrow@ajay.app" = { install_url = "https://addons.mozilla.org/firefox/downloads/latest/dearrow/latest.xpi"; installation_mode = "force_installed"; }; # Return Youtube Dislike "{762f9885-5a13-4abd-9c77-433dcd38b8fd}" = { install_url = "https://addons.mozilla.org/firefox/downloads/latest/return-youtube-dislikes/latest.xpi"; installation_mode = "force_installed"; }; # Youtube Nonstop "{0d7cafdd-501c-49ca-8ebb-e3341caaa55e}" = { install_url = "https://addons.mozilla.org/firefox/downloads/latest/youtube-nonstop/latest.xpi"; installation_mode = "force_installed"; }; # Sidebery "{3c078156-979c-498b-8990-85f7987dd929}" = { install_url = "https://addons.mozilla.org/firefox/downloads/latest/sidebery/latest.xpi"; installation_mode = "normal_installed"; }; # TamperMonkey "firefox@tampermonkey.net" = { install_url = "https://addons.mozilla.org/firefox/downloads/latest/tampermonkey/latest.xpi"; installation_mode = "force_installed"; }; # Floccus "floccus@handmadeideas.org" = { install_url = "https://addons.mozilla.org/firefox/downloads/latest/floccus/latest.xpi"; installation_mode = "force_installed"; }; }; Preferences = { "browser.startup.homepage" = "https://d.in.rschanz.org"; "extensions.activeThemeID" = { Value = "firefox-compact-dark@mozilla.org"; Status = "locked"; }; "toolkit.legacyUserProfileCustomizations.stylesheets" = lock-true; "xpinstall.whitelist.required" = lock-true; "dom.webgpu.enabled" = lock-true; "media.eme.enabled" = lock-true; "general.autoScroll" = lock-true; "general.smoothScroll" = lock-true; "browser.crashReports.unsubmittedCheck.autoSubmit2" = lock-false; "browser.aboutConfig.showWarning" = lock-false; }; }; profiles.${config.home.username} = { name = "${config.home.username}"; isDefault = true; containersForce = true; containers = { rit = { name = "RIT"; color = "orange"; icon = "dollar"; id = 1; }; ritwork = { name = "RIT Work"; color = "green"; icon = "briefcase"; id = 2; }; other = { name = "Other"; color = "blue"; icon = "fingerprint"; id = 3; }; }; search = { force = true; default = "DuckDuckGo"; order = ["DuckDuckGo" "Google"]; engines = { "Nix Packages" = { urls = [ { template = "https://search.nixos.org/packages"; params = [ { name = "type"; value = "packages"; } { name = "channel"; value = "unstable"; } { name = "query"; value = "{searchTerms}"; } ]; } ]; icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; definedAliases = ["@np"]; }; }; }; userChrome = " #main-window #titlebar { overflow: hidden; transition: height 0.3s 0.3s !important; } /* Default state: Set initial height to enable animation */ #main-window #titlebar { height: 3em !important; } #main-window[uidensity=\"touch\"] #titlebar { height: 3.35em !important; } #main-window[uidensity=\"compact\"] #titlebar { height: 2.7em !important; } /* Hidden state: Hide native tabs strip */ #main-window[titlepreface*=\"​\"] #titlebar { height: 0 !important; } /* Hidden state: Fix z-index of active pinned tabs */ #main-window[titlepreface*=\"​\"] #tabbrowser-tabs { z-index: 0 !important; } /* Sidebery expand on mouse-over and hide otherwise */ /* Source file https://github.com/MrOtherGuy/firefox-csshacks/tree/master/chrome/autohide_sidebar.css made available under Mozilla Public License v. 2.0 See the above repository for updates as well as full license text. */ /* Show sidebar only when the cursor is over it */ /* The border controlling sidebar width will be removed so you'll need to modify these values to change width */ #sidebar-box{ --uc-sidebar-width: 60px; --uc-sidebar-hover-width: 230px; --uc-autohide-sidebar-delay: 200ms; /* Wait 0.2s before hiding sidebar */ --uc-autohide-transition-duration: 115ms; --uc-autohide-transition-type: linear; --browser-area-z-index-sidebar: 3; position: relative; min-width: var(--uc-sidebar-width) !important; width: var(--uc-sidebar-width) !important; max-width: var(--uc-sidebar-width) !important; z-index: var(--browser-area-z-index-sidebar,3); } #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 } #main-window[sizemode=\"fullscreen\"] #sidebar-box{ --uc-sidebar-width: 1px; } #sidebar-splitter{ display: none } #sidebar-header{ overflow: hidden; color: var(--chrome-color, inherit) !important; padding-inline: 0 !important; } #sidebar-header::before, #sidebar-header::after{ content: \"\"; display: flex; padding-left: 8px; } #sidebar-header, #sidebar{ transition: min-width var(--uc-autohide-transition-duration) var(--uc-autohide-transition-type) var(--uc-autohide-sidebar-delay) !important; min-width: var(--uc-sidebar-width) !important; will-change: min-width; } #sidebar-box:hover > #sidebar-header, #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; } /* Remove the tabs label and move the Sidebary icon to the center of the box */ #sidebar-box:hover [id=\"sidebar-icon\"] { transform: translateX(0px) !important; transition-delay: 0ms !important; } #sidebar-box [id=\"sidebar-icon\"] { transform: translateX(9px); transition: transform var(--uc-autohide-transition-duration) var(--uc-autohide-transition-type) var(--uc-autohide-sidebar-delay) !important; } #sidebar-box [id=\"sidebar-title\"] { visibility: hidden !important; transition: visibility var(--uc-autohide-transition-duration) var(--uc-autohide-transition-type) var(--uc-autohide-sidebar-delay) !important; } #sidebar-box:hover [id=\"sidebar-title\"] { visibility: visible !important; transition-delay: 0ms !important; } "; }; }; # The home.packages option allows you to install Nix packages into your # environment. home.packages = with pkgs; [ # # Adds the 'hello' command to your environment. It prints a friendly # # "Hello, world!" when run. # pkgs.hello yt-dlp #pass rustup zoxide nodePackages.pnpm gcc aerc pkg-config wttrbar wl-clip-persist gifski waypaper gdu spotify-player hyprpicker xwayland xdg-desktop-portal xdg-desktop-portal-gtk mpv imv libva libvdpau #wpaperd hypridle #latest.firefox-nightly-bin eza # Wrapped programs for some env variables (pkgs.writeScriptBin "hyprlock" '' #! ${pkgs.bash}/bin/bash export LD_PRELOAD="/run/current-system/profile/lib/libpam.so.0:/run/current-system/profile/lib/libfontconfig.so:$LD_PRELOAD" exec ${pkgs.hyprlock}/bin/hyprlock "$@" '') # Flakes specific things defined in flake.nix hyprland.packages.${pkgs.system}.default hyprland.packages.${pkgs.system}.xdg-desktop-portal-hyprland nixgl.packages.${pkgs.system}.nixGLIntel wpaperd.packages.${pkgs.system}.wpaperd # Fonts! noto-fonts dejavu_fonts liberation_ttf noto-fonts-cjk-sans noto-fonts-emoji # # It is sometimes useful to fine-tune packages, for example, by applying # # overrides. You can do that directly here, just don't forget the # # parentheses. Maybe you want to install Nerd Fonts with a limited number of # # fonts? # (pkgs.nerdfonts.override { fonts = [ "FantasqueSansMono" ]; }) # # You can also create simple shell scripts directly inside your # # configuration. For example, this adds a command 'my-hello' to your # # environment: # (pkgs.writeShellScriptBin "my-hello" '' # echo "Hello, ${config.home.username}!" # '') ]; # Home Manager is pretty good at managing dotfiles. The primary way to manage # plain files is through 'home.file'. home.file = { # # Building this configuration will create a copy of 'dotfiles/screenrc' in # # the Nix store. Activating the configuration will then make '~/.screenrc' a # # symlink to the Nix store copy. # ".screenrc".source = dotfiles/screenrc; # # You can also set the file content immediately. # ".gradle/gradle.properties".text = '' # org.gradle.console=verbose # org.gradle.daemon.idletimeout=3600000 # ''; }; # You can also manage environment variables but you will have to manually # source # # ~/.nix-profile/etc/profile.d/hm-session-vars.sh # # or # # /etc/profiles/per-user/ryan/etc/profile.d/hm-session-vars.sh # # if you don't want to manage your shell through Home Manager. home.sessionVariables = { # EDITOR = "emacs"; }; # Let Home Manager install and manage itself. programs.home-manager.enable = true; }