diff --git a/flake.nix b/flake.nix index caf51da..5b3ffb2 100644 --- a/flake.nix +++ b/flake.nix @@ -1,96 +1,110 @@ { description = "Flake of LibrePhoenix"; - outputs = inputs@{ self, nixpkgs, nixpkgs-stable, home-manager, nix-doom-emacs, nix-straight, - stylix, blocklist-hosts, rust-overlay, hyprland-plugins, - eaf, eaf-browser, org-nursery, org-yaap, - org-side-tree, org-timeblock, phscroll, ... }: - let - # ---- SYSTEM SETTINGS ---- # - systemSettings = { - system = "x86_64-linux"; # system arch - hostname = "snowfire"; # hostname - profile = "personal"; # select a profile defined from my profiles directory - timezone = "America/Chicago"; # select timezone - locale = "en_US.UTF-8"; # select locale - bootMode = "uefi"; # uefi or bios - bootMountPath = "/boot"; # mount path for efi boot partition; only used for uefi boot mode - grubDevice = ""; # device identifier for grub; only used for legacy (bios) boot mode - }; + outputs = inputs@{ self, nixpkgs, nixpkgs-stable, home-manager, nix-doom-emacs + , nix-straight, stylix, blocklist-hosts, rust-overlay, hyprland-plugins, eaf + , eaf-browser, org-nursery, org-yaap, org-side-tree, org-timeblock, phscroll + , ... }: + let + # ---- SYSTEM SETTINGS ---- # + systemSettings = { + system = "x86_64-linux"; # system arch + hostname = "snowfire"; # hostname + profile = + "personal"; # select a profile defined from my profiles directory + timezone = "America/Chicago"; # select timezone + locale = "en_US.UTF-8"; # select locale + bootMode = "uefi"; # uefi or bios + bootMountPath = + "/boot"; # mount path for efi boot partition; only used for uefi boot mode + grubDevice = + ""; # device identifier for grub; only used for legacy (bios) boot mode + }; - # ----- USER SETTINGS ----- # - userSettings = rec { - username = "emmet"; # username - name = "Emmet"; # name/identifier - email = "emmet@librephoenix.com"; # email (used for certain configurations) - dotfilesDir = "~/.dotfiles"; # absolute path of the local repo - theme = "uwunicorn-yt"; # selcted theme from my themes directory (./themes/) - wm = "hyprland"; # Selected window manager or desktop environment; must select one in both ./user/wm/ and ./system/wm/ - # window manager type (hyprland or x11) translator - wmType = if (wm == "hyprland") then "wayland" else "x11"; - browser = "qutebrowser"; # Default browser; must select one from ./user/app/browser/ - defaultRoamDir = "Personal.p"; # Default org roam directory relative to ~/Org - term = "alacritty"; # Default terminal command; - font = "Intel One Mono"; # Selected font - fontPkg = pkgs.intel-one-mono; # Font package - editor = "emacsclient"; # Default editor; - # editor spawning translator - # generates a command that can be used to spawn editor inside a gui - # EDITOR and TERM session variables must be set in home.nix or other module - # I set the session variable SPAWNEDITOR to this in my home.nix for convenience - spawnEditor = if (editor == "emacsclient") then "emacsclient -c -a 'emacs'" - else (if ((editor == "vim") || (editor == "nvim") || (editor == "nano")) then "exec " + term + " -e " + editor else editor); - }; + # ----- USER SETTINGS ----- # + userSettings = rec { + username = "emmet"; # username + name = "Emmet"; # name/identifier + email = + "emmet@librephoenix.com"; # email (used for certain configurations) + dotfilesDir = "~/.dotfiles"; # absolute path of the local repo + theme = + "uwunicorn-yt"; # selcted theme from my themes directory (./themes/) + wm = + "hyprland"; # Selected window manager or desktop environment; must select one in both ./user/wm/ and ./system/wm/ + # window manager type (hyprland or x11) translator + wmType = if (wm == "hyprland") then "wayland" else "x11"; + browser = + "qutebrowser"; # Default browser; must select one from ./user/app/browser/ + defaultRoamDir = + "Personal.p"; # Default org roam directory relative to ~/Org + term = "alacritty"; # Default terminal command; + font = "Intel One Mono"; # Selected font + fontPkg = pkgs.intel-one-mono; # Font package + editor = "emacsclient"; # Default editor; + # editor spawning translator + # generates a command that can be used to spawn editor inside a gui + # EDITOR and TERM session variables must be set in home.nix or other module + # I set the session variable SPAWNEDITOR to this in my home.nix for convenience + spawnEditor = if (editor == "emacsclient") then + "emacsclient -c -a 'emacs'" + else + (if ((editor == "vim") || (editor == "nvim") + || (editor == "nano")) then + "exec " + term + " -e " + editor + else + editor); + }; + # create patched nixpkgs + nixpkgs-patched = + (import nixpkgs { system = systemSettings.system; }).applyPatches { + name = "nixpkgs-patched"; + src = nixpkgs; + patches = [ ./patches/emacs-no-version-check.patch ]; + }; - # create patched nixpkgs - nixpkgs-patched = (import nixpkgs { system = systemSettings.system; }).applyPatches { - name = "nixpkgs-patched"; - src = nixpkgs; - patches = [ - ./patches/emacs-no-version-check.patch - ]; - }; + # configure pkgs + pkgs = import nixpkgs-patched { + system = systemSettings.system; + config = { + allowUnfree = true; + allowUnfreePredicate = (_: true); + }; + overlays = [ rust-overlay.overlays.default ]; + }; - # configure pkgs - pkgs = import nixpkgs-patched { - system = systemSettings.system; - config = { allowUnfree = true; - allowUnfreePredicate = (_: true); }; - overlays = [ rust-overlay.overlays.default ]; - }; + pkgs-stable = import nixpkgs-stable { + system = systemSettings.system; + config = { + allowUnfree = true; + allowUnfreePredicate = (_: true); + }; + overlays = [ rust-overlay.overlays.default ]; + }; - pkgs-stable = import nixpkgs-stable { - system = systemSettings.system; - config = { allowUnfree = true; - allowUnfreePredicate = (_: true); }; - overlays = [ rust-overlay.overlays.default ]; - }; + # configure lib + lib = nixpkgs.lib; - # configure lib - lib = nixpkgs.lib; + # Systems that can run tests: + supportedSystems = [ "aarch64-linux" "i686-linux" "x86_64-linux" ]; - # Systems that can run tests: - supportedSystems = [ - "aarch64-linux" - "i686-linux" - "x86_64-linux" - ]; + # Function to generate a set based on supported systems: + forAllSystems = inputs.nixpkgs.lib.genAttrs supportedSystems; - # Function to generate a set based on supported systems: - forAllSystems = inputs.nixpkgs.lib.genAttrs supportedSystems; + # Attribute set of nixpkgs for each system: + nixpkgsFor = + forAllSystems (system: import inputs.nixpkgs { inherit system; }); - # Attribute set of nixpkgs for each system: - nixpkgsFor = forAllSystems (system: - import inputs.nixpkgs { inherit system; }); - - in { - homeConfigurations = { - user = home-manager.lib.homeManagerConfiguration { + in { + homeConfigurations = { + user = home-manager.lib.homeManagerConfiguration { inherit pkgs; - modules = [ (./. + "/profiles"+("/"+systemSettings.profile)+"/home.nix") # load home.nix from selected PROFILE - # inputs.nix-flatpak.homeManagerModules.nix-flatpak # Declarative flatpaks - ]; + modules = [ + (./. + "/profiles" + ("/" + systemSettings.profile) + + "/home.nix") # load home.nix from selected PROFILE + # inputs.nix-flatpak.homeManagerModules.nix-flatpak # Declarative flatpaks + ]; extraSpecialArgs = { # pass config variables from above inherit pkgs-stable; @@ -108,40 +122,47 @@ inherit (inputs) stylix; inherit (inputs) hyprland-plugins; }; - }; - }; - nixosConfigurations = { - system = lib.nixosSystem { - system = systemSettings.system; - modules = [ (./. + "/profiles"+("/"+systemSettings.profile)+"/configuration.nix") ]; # load configuration.nix from selected PROFILE - specialArgs = { - # pass config variables from above - inherit pkgs-stable; - inherit systemSettings; - inherit userSettings; - inherit (inputs) stylix; - inherit (inputs) blocklist-hosts; }; }; - }; - - packages = forAllSystems (system: - let pkgs = nixpkgsFor.${system}; in - { - default = self.packages.${system}.install; - - install = pkgs.writeScriptBin "install" ./install.sh; - }); - - apps = forAllSystems (system: { - default = self.apps.${system}.install; - - install = { - type = "app"; - program = "${self.packages.${system}.install}/bin/install"; + nixosConfigurations = { + system = lib.nixosSystem { + system = systemSettings.system; + modules = [ + (./. + "/profiles" + ("/" + systemSettings.profile) + + "/configuration.nix") + ]; # load configuration.nix from selected PROFILE + specialArgs = { + # pass config variables from above + inherit pkgs-stable; + inherit systemSettings; + inherit userSettings; + inherit (inputs) stylix; + inherit (inputs) blocklist-hosts; + }; + }; }; - }); - }; + + packages = forAllSystems (system: + let pkgs = nixpkgsFor.${system}; + in { + default = self.packages.${system}.install; + + install = pkgs.writeShellApplication { + name = "install"; + runtimeInputs = with pkgs; [ git ]; + text = ''${./install.sh} "$@"''; + }; + }); + + #apps = forAllSystems (system: { + # default = self.apps.${system}.install; + + # install = { + # type = "app"; + # program = "${self.packages.${system}.install}/bin/install"; + # }; + #}); + }; inputs = { nixpkgs.url = "nixpkgs/nixos-unstable";