diff --git a/flake.lock b/flake.lock index 58b3923..a2d4fae 100755 --- a/flake.lock +++ b/flake.lock @@ -41,6 +41,29 @@ "type": "github" } }, + "firefox-addons": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "dir": "pkgs/firefox-addons", + "lastModified": 1743119709, + "narHash": "sha256-tlJY7MfAena/yi3lmd7y7vQGpLma4Q1BLtO4dvzF/Vs=", + "owner": "rycee", + "repo": "nur-expressions", + "rev": "f8861a4b09a181dd88f6626d0202d9225ae85d65", + "type": "gitlab" + }, + "original": { + "dir": "pkgs/firefox-addons", + "owner": "rycee", + "repo": "nur-expressions", + "type": "gitlab" + } + }, "flake-compat": { "locked": { "lastModified": 1688025799, @@ -73,6 +96,40 @@ } }, "flake-utils": { + "locked": { + "lastModified": 1629284811, + "narHash": "sha256-JHgasjPR0/J1J3DRm4KxM4zTyAj4IOJY8vIl75v/kPI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c5d161cc0af116a2e17f54316f0bf43f0819785c", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils-plus": { + "inputs": { + "flake-utils": "flake-utils_2" + }, + "locked": { + "lastModified": 1715533576, + "narHash": "sha256-fT4ppWeCJ0uR300EH3i7kmgRZnAVxrH+XtK09jQWihk=", + "owner": "gytis-ivaskevicius", + "repo": "flake-utils-plus", + "rev": "3542fe9126dc492e53ddd252bb0260fe035f2c0f", + "type": "github" + }, + "original": { + "owner": "gytis-ivaskevicius", + "repo": "flake-utils-plus", + "rev": "3542fe9126dc492e53ddd252bb0260fe035f2c0f", + "type": "github" + } + }, + "flake-utils_2": { "inputs": { "systems": "systems" }, @@ -90,25 +147,6 @@ "type": "github" } }, - "flake-utils-plus": { - "inputs": { - "flake-utils": "flake-utils" - }, - "locked": { - "lastModified": 1715533576, - "narHash": "sha256-fT4ppWeCJ0uR300EH3i7kmgRZnAVxrH+XtK09jQWihk=", - "owner": "gytis-ivaskevicius", - "repo": "flake-utils-plus", - "rev": "3542fe9126dc492e53ddd252bb0260fe035f2c0f", - "type": "github" - }, - "original": { - "owner": "gytis-ivaskevicius", - "repo": "flake-utils-plus", - "rev": "3542fe9126dc492e53ddd252bb0260fe035f2c0f", - "type": "github" - } - }, "home-manager": { "inputs": { "nixpkgs": [ @@ -202,6 +240,7 @@ "inputs": { "apple-silicon": "apple-silicon", "disko": "disko", + "firefox-addons": "firefox-addons", "home-manager": "home-manager", "nixos-generators": "nixos-generators", "nixpkgs": "nixpkgs_2", diff --git a/flake.nix b/flake.nix index c82efbc..3356343 100755 --- a/flake.nix +++ b/flake.nix @@ -21,6 +21,10 @@ url = "github:nix-community/nixos-generators"; inputs.nixpkgs.follows = "nixpkgs"; }; + firefox-addons = { + url = "gitlab:rycee/nur-expressions?dir=pkgs/firefox-addons"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; outputs = inputs: @@ -36,8 +40,6 @@ namespace = "reichardnix"; }; - - # home-manager.enable = true; }; } diff --git a/homes/aarch64-linux/evanreichard@mbp-nixos/default.nix b/homes/aarch64-linux/evanreichard@mbp-nixos/default.nix index 690ef9d..c75e8e4 100755 --- a/homes/aarch64-linux/evanreichard@mbp-nixos/default.nix +++ b/homes/aarch64-linux/evanreichard@mbp-nixos/default.nix @@ -1,15 +1,26 @@ -{ pkgs, ... }: +{ pkgs, config, ... }: { reichardnix = { - programs.btop.enable = true; - programs.direnv.enable = true; - programs.ghostty.enable = true; - programs.git.enable = true; - programs.k9s.enable = true; - programs.nvim.enable = true; - programs.hyprland.enable = true; + user = { + enable = true; + inherit (config.snowfallorg.user) name; + }; - programs.aws.enable = false; + programs = { + browsers.firefox = { + enable = true; + gpuAcceleration = true; + hardwareDecoding = true; + }; + + btop.enable = true; + direnv.enable = true; + ghostty.enable = true; + git.enable = true; + hyprland.enable = true; + k9s.enable = true; + nvim.enable = true; + }; }; # Global Packages @@ -31,7 +42,5 @@ .mode column ''; - # Enable Home Manager & Self Manage - home.stateVersion = "25.05"; - programs.home-manager.enable = true; + home.stateVersion = "24.11"; } diff --git a/lib/module/default.nix b/lib/module/default.nix new file mode 100644 index 0000000..e3ad401 --- /dev/null +++ b/lib/module/default.nix @@ -0,0 +1,12 @@ +{ lib, ... }: +let + inherit (lib) mkOption types; +in +rec { + mkOpt = + type: default: description: + mkOption { inherit type default description; }; + + + mkBoolOpt = mkOpt types.bool; +} diff --git a/modules/home/programs/browsers/firefox/default.nix b/modules/home/programs/browsers/firefox/default.nix new file mode 100644 index 0000000..0ccad97 --- /dev/null +++ b/modules/home/programs/browsers/firefox/default.nix @@ -0,0 +1,112 @@ +{ config, lib, pkgs, namespace, ... }: +let + inherit (lib) + types + mkIf + mkMerge + optionalAttrs + ; + inherit (lib.${namespace}) mkBoolOpt mkOpt; + + cfg = config.${namespace}.programs.browsers.firefox; +in +{ + imports = lib.snowfall.fs.get-non-default-nix-files ./.; + + options.${namespace}.programs.browsers.firefox = with types; { + enable = lib.mkEnableOption "Firefox"; + + extraConfig = mkOpt str "" "Extra configuration for the user profile JS file."; + gpuAcceleration = mkBoolOpt false "Enable GPU acceleration."; + hardwareDecoding = mkBoolOpt false "Enable hardware video decoding."; + + policies = mkOpt attrs + { + CaptivePortal = false; + DisableFirefoxStudies = true; + DisableFormHistory = true; + DisablePocket = true; + DisableTelemetry = true; + DisplayBookmarksToolbar = false; + DontCheckDefaultBrowser = true; + FirefoxHome = { + Pocket = false; + Snippets = false; + }; + PasswordManagerEnabled = false; + UserMessaging = { + ExtensionRecommendations = false; + SkipOnboarding = true; + }; + ExtensionSettings = { + # Block All + # "*".installation_mode = "blocked"; + + # Bypass Paywalls + "magnolia@12.34" = { + install_url = "https://gitflic.ru/project/magnolia1234/bpc_uploads/blob/raw?file=bypass_paywalls_clean-latest.xpi"; + installation_mode = "force_installed"; + }; + }; + Preferences = { }; + } "Policies to apply to firefox"; + + settings = mkOpt attrs { } "Settings to apply to the profile."; + + extensions = mkOpt (with lib.types; listOf package) + (with pkgs.firefox-addons; [ + bitwarden + darkreader + kagi-search + sponsorblock + ublock-origin + + # bypass-paywalls-clean + ]) "Extensions to install"; + }; + + config = mkIf cfg.enable { + programs.firefox = { + enable = true; + + inherit (cfg) policies; + + profiles = { + ${config.${namespace}.user.name} = { + inherit (cfg) extraConfig extensions; + inherit (config.${namespace}.user) name; + + id = 0; + + settings = mkMerge [ + cfg.settings + { + "browser.aboutConfig.showWarning" = false; + "browser.aboutwelcome.enabled" = false; + "browser.sessionstore.warnOnQuit" = true; + "browser.shell.checkDefaultBrowser" = false; + "general.smoothScroll.msdPhysics.enabled" = true; + "intl.accept_languages" = "en-US,en"; + + # "devtools.chrome.enabled" = true; + # "xpinstall.signatures.required" = false; + } + (optionalAttrs cfg.gpuAcceleration { + "dom.webgpu.enabled" = true; + "gfx.webrender.all" = true; + "layers.gpu-process.enabled" = true; + "layers.mlgpu.enabled" = true; + }) + (optionalAttrs cfg.hardwareDecoding { + "media.ffmpeg.vaapi.enabled" = true; + "media.gpu-process-decoder" = true; + "media.hardware-video-decoding.enabled" = true; + }) + ]; + + # userChrome = ./chrome/userChrome.css; + }; + }; + }; + }; +} diff --git a/modules/home/programs/ghostty/default.nix b/modules/home/programs/ghostty/default.nix index 4deb13d..bc44452 100755 --- a/modules/home/programs/ghostty/default.nix +++ b/modules/home/programs/ghostty/default.nix @@ -20,7 +20,7 @@ in SHELL="$BASH" PATH=~/.bin:$PATH eval "$(thefuck --alias)" - set -o vi + set -o vi || true bind "set show-mode-in-prompt on" fastfetch ''; diff --git a/modules/home/programs/git/default.nix b/modules/home/programs/git/default.nix index e92eaba..9f38275 100755 --- a/modules/home/programs/git/default.nix +++ b/modules/home/programs/git/default.nix @@ -26,6 +26,9 @@ in } ]; extraConfig = { + user = { + email = "evan@reichard.io"; + }; core = { autocrlf = "input"; safecrlf = "true"; diff --git a/modules/home/programs/hyprland/default.nix b/modules/home/programs/hyprland/default.nix index ec390b9..3130e16 100755 --- a/modules/home/programs/hyprland/default.nix +++ b/modules/home/programs/hyprland/default.nix @@ -11,6 +11,7 @@ in config = mkIf cfg.enable { wayland.windowManager.hyprland = { enable = true; + # systemd.enable = false; extraConfig = builtins.readFile ./config/hyprland.conf; }; diff --git a/modules/home/user/default.nix b/modules/home/user/default.nix new file mode 100644 index 0000000..9c19f40 --- /dev/null +++ b/modules/home/user/default.nix @@ -0,0 +1,51 @@ +{ config, lib, pkgs, namespace, ... }: +let + inherit (lib) + types + mkIf + mkDefault + mkMerge + ; + inherit (lib.${namespace}) mkOpt; + + cfg = config.${namespace}.user; + + home-directory = + if cfg.name == null then + null + else if pkgs.stdenv.hostPlatform.isDarwin then + "/Users/${cfg.name}" + else + "/home/${cfg.name}"; +in +{ + options.${namespace}.user = { + enable = mkOpt types.bool false "Whether to configure the user account."; + email = mkOpt types.str "evan@reichard.io" "The email of the user."; + fullName = mkOpt types.str "Evan Reichard" "The full name of the user."; + home = mkOpt (types.nullOr types.str) home-directory "The user's home directory."; + name = mkOpt (types.nullOr types.str) config.snowfallorg.user.name "The user account."; + }; + + config = mkIf cfg.enable (mkMerge [ + { + assertions = [ + { + assertion = cfg.name != null; + message = "${namespace}.user.name must be set"; + } + { + assertion = cfg.home != null; + message = "${namespace}.user.home must be set"; + } + ]; + + home = { + homeDirectory = mkDefault cfg.home; + username = mkDefault cfg.name; + }; + + programs.home-manager.enable = true; + } + ]); +} diff --git a/modules/nixos/display-managers/sddm/default.nix b/modules/nixos/display-managers/sddm/default.nix new file mode 100644 index 0000000..6f1725b --- /dev/null +++ b/modules/nixos/display-managers/sddm/default.nix @@ -0,0 +1,33 @@ +{ config, lib, pkgs, namespace, ... }: +let + inherit (lib) mkIf; + + cfg = config.${namespace}.display-managers.sddm; +in +{ + options.${namespace}.display-managers.sddm = { + enable = lib.mkEnableOption "sddm"; + }; + + config = mkIf cfg.enable { + environment.systemPackages = with pkgs; [ + catppuccin-sddm + ]; + + environment.sessionVariables = { + QT_SCREEN_SCALE_FACTORS = "2"; + QT_FONT_DPI = "192"; + }; + + services = { + displayManager = { + sddm = { + inherit (cfg) enable; + package = pkgs.kdePackages.sddm; + theme = "catppuccin-mocha"; + wayland.enable = true; + }; + }; + }; + }; +} diff --git a/overlays/firefox-addons/default.nix b/overlays/firefox-addons/default.nix new file mode 100644 index 0000000..decb8af --- /dev/null +++ b/overlays/firefox-addons/default.nix @@ -0,0 +1,8 @@ +{ inputs, ... }: +final: _prev: { + firefox-addons = import inputs.firefox-addons { + inherit (final) fetchurl; + inherit (final) lib; + inherit (final) stdenv; + }; +} diff --git a/systems/aarch64-linux/mbp-nixos/.gitignore b/systems/aarch64-linux/mbp-nixos/.gitignore deleted file mode 100755 index 2b8800b..0000000 --- a/systems/aarch64-linux/mbp-nixos/.gitignore +++ /dev/null @@ -1 +0,0 @@ -firmware diff --git a/systems/aarch64-linux/mbp-nixos/default.nix b/systems/aarch64-linux/mbp-nixos/default.nix index c8a7c54..76c3bcf 100755 --- a/systems/aarch64-linux/mbp-nixos/default.nix +++ b/systems/aarch64-linux/mbp-nixos/default.nix @@ -10,6 +10,13 @@ nixpkgs.hostPlatform = lib.mkDefault "aarch64-linux"; time.timeZone = "America/New_York"; + # Enable SSDM + reichardnix = { + display-managers.sddm = { + enable = true; + }; + }; + # Boot Loader Config boot.loader = { systemd-boot.enable = true; @@ -37,37 +44,20 @@ bluetooth.powerOnBoot = true; }; - # # User Config - # users.users.evanreichard = { - # isNormalUser = true; - # home = "/home/evanreichard"; - # extraGroups = [ "wheel" "networkmanager" "video" ]; - # shell = pkgs.bash; - # }; - - # Home Manager Config - # home-manager = { - # useGlobalPkgs = true; - # useUserPackages = true; - # # users.evanreichard = import ../home-manager/home.nix; - # }; - # HyprLand Config - programs.hyprland.enable = true; - # environment.sessionVariables.WLR_DRM_DEVICES = "/dev/dri/card0"; + programs.hyprland = { + enable = true; + withUWSM = true; + }; # System Packages environment.systemPackages = with pkgs; [ ghostty - firefox htop tmux vim wget - - # mesa-asahi-edge - # mesa - # hyprlock - # hypridle ]; + + system.stateVersion = "24.11"; } diff --git a/systems/aarch64-linux/mbp-nixos/firmware/all_firmware.tar.gz b/systems/aarch64-linux/mbp-nixos/firmware/all_firmware.tar.gz new file mode 100755 index 0000000..4e330cd Binary files /dev/null and b/systems/aarch64-linux/mbp-nixos/firmware/all_firmware.tar.gz differ diff --git a/systems/aarch64-linux/mbp-nixos/firmware/kernelcache.release.mac14j b/systems/aarch64-linux/mbp-nixos/firmware/kernelcache.release.mac14j new file mode 100755 index 0000000..9f95e2b Binary files /dev/null and b/systems/aarch64-linux/mbp-nixos/firmware/kernelcache.release.mac14j differ