nixos-config/flake.nix

319 lines
11 KiB
Nix
Raw Normal View History

2023-05-08 04:17:40 +05:30
{
2023-06-11 20:56:47 +05:30
description = "Flake of LibrePhoenix";
2023-05-08 04:17:40 +05:30
outputs = inputs@{ self, ... }:
2024-03-08 18:59:53 +05:30
let
# ---- SYSTEM SETTINGS ---- #
systemSettings = {
system = "x86_64-linux"; # system arch
hostname = "snowfire"; # hostname
2024-03-10 04:06:51 +05:30
profile = "personal"; # select a profile defined from my profiles directory
2024-03-08 18:59:53 +05:30
timezone = "America/Chicago"; # select timezone
locale = "en_US.UTF-8"; # select locale
bootMode = "uefi"; # uefi or bios
2024-03-10 04:06:51 +05:30
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
2024-07-08 20:31:54 +05:30
gpuType = "amd"; # amd, intel or nvidia; only makes some slight mods for amd at the moment
2024-03-08 18:59:53 +05:30
};
2023-05-08 04:17:40 +05:30
2024-03-08 18:59:53 +05:30
# ----- USER SETTINGS ----- #
userSettings = rec {
username = "emmet"; # username
name = "Emmet"; # name/identifier
2024-03-10 04:06:51 +05:30
email = "emmet@librephoenix.com"; # email (used for certain configurations)
2024-03-08 18:59:53 +05:30
dotfilesDir = "~/.dotfiles"; # absolute path of the local repo
2024-06-12 09:20:51 +05:30
theme = "io"; # selcted theme from my themes directory (./themes/)
2024-03-10 04:06:51 +05:30
wm = "hyprland"; # Selected window manager or desktop environment; must select one in both ./user/wm/ and ./system/wm/
2024-03-08 18:59:53 +05:30
# window manager type (hyprland or x11) translator
wmType = if (wm == "hyprland") then "wayland" else "x11";
2024-03-10 04:06:51 +05:30
browser = "qutebrowser"; # Default browser; must select one from ./user/app/browser/
spawnBrowser = if ((browser == "qutebrowser") && (wm == "hyprland")) then "qutebrowser-hyprprofile" else (if (browser == "qutebrowser") then "qutebrowser --qt-flag enable-gpu-rasterization --qt-flag enable-native-gpu-memory-buffers --qt-flag num-raster-threads=4" else browser); # Browser spawn command must be specail for qb, since it doesn't gpu accelerate by default (why?)
2024-03-10 04:06:51 +05:30
defaultRoamDir = "Personal.p"; # Default org roam directory relative to ~/Org
2024-03-08 18:59:53 +05:30
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
2024-03-10 04:06:51 +05:30
"emacsclient -c -a 'emacs'"
else
(if ((editor == "vim") ||
(editor == "nvim") ||
(editor == "nano")) then
"exec " + term + " -e " + editor
else
editor);
2024-03-08 18:59:53 +05:30
};
2024-03-08 18:59:53 +05:30
# create patched nixpkgs
nixpkgs-patched =
2024-07-08 20:31:54 +05:30
(import inputs.nixpkgs { system = systemSettings.system; rocmSupport = (if systemSettings.gpu == "amd" then true else false); }).applyPatches {
2024-03-08 18:59:53 +05:30
name = "nixpkgs-patched";
src = inputs.nixpkgs;
2024-03-08 18:59:53 +05:30
patches = [ ./patches/emacs-no-version-check.patch ];
};
2024-03-08 18:59:53 +05:30
# configure pkgs
# use nixpkgs if running a server (homelab or worklab profile)
# otherwise use patched nixos-unstable nixpkgs
pkgs = (if ((systemSettings.profile == "homelab") || (systemSettings.profile == "worklab"))
then
pkgs-stable
else
(import nixpkgs-patched {
system = systemSettings.system;
config = {
allowUnfree = true;
allowUnfreePredicate = (_: true);
};
overlays = [ inputs.rust-overlay.overlays.default ];
}));
2023-05-08 04:17:40 +05:30
pkgs-stable = import inputs.nixpkgs-stable {
2024-03-08 18:59:53 +05:30
system = systemSettings.system;
config = {
allowUnfree = true;
allowUnfreePredicate = (_: true);
};
};
pkgs-unstable = import inputs.nixpkgs-patched {
system = systemSettings.system;
config = {
allowUnfree = true;
allowUnfreePredicate = (_: true);
};
overlays = [ inputs.rust-overlay.overlays.default ];
};
pkgs-emacs = import inputs.emacs-pin-nixpkgs {
system = systemSettings.system;
};
pkgs-kdenlive = import inputs.kdenlive-pin-nixpkgs {
system = systemSettings.system;
};
pkgs-nwg-dock-hyprland = import inputs.nwg-dock-hyprland-pin-nixpkgs {
system = systemSettings.system;
};
2024-03-08 18:59:53 +05:30
# configure lib
# use nixpkgs if running a server (homelab or worklab profile)
# otherwise use patched nixos-unstable nixpkgs
lib = (if ((systemSettings.profile == "homelab") || (systemSettings.profile == "worklab"))
then
inputs.nixpkgs-stable.lib
else
inputs.nixpkgs.lib);
2023-05-08 04:17:40 +05:30
# use home-manager-stable if running a server (homelab or worklab profile)
# otherwise use home-manager-unstable
home-manager = (if ((systemSettings.profile == "homelab") || (systemSettings.profile == "worklab"))
then
inputs.home-manager-stable
else
inputs.home-manager-unstable);
2024-03-08 18:59:53 +05:30
# Systems that can run tests:
supportedSystems = [ "aarch64-linux" "i686-linux" "x86_64-linux" ];
2024-03-08 18:59:53 +05:30
# Function to generate a set based on supported systems:
forAllSystems = inputs.nixpkgs.lib.genAttrs supportedSystems;
2024-03-08 18:59:53 +05:30
# Attribute set of nixpkgs for each system:
nixpkgsFor =
forAllSystems (system: import inputs.nixpkgs { inherit system; });
2024-03-08 18:59:53 +05:30
in {
homeConfigurations = {
user = home-manager.lib.homeManagerConfiguration {
inherit pkgs;
2024-03-08 18:59:53 +05:30
modules = [
(./. + "/profiles" + ("/" + systemSettings.profile) + "/home.nix") # load home.nix from selected PROFILE
2024-03-08 18:59:53 +05:30
];
extraSpecialArgs = {
# pass config variables from above
inherit pkgs-stable;
inherit pkgs-emacs;
inherit pkgs-kdenlive;
inherit pkgs-nwg-dock-hyprland;
inherit systemSettings;
inherit userSettings;
inherit inputs;
};
2024-03-08 18:59:53 +05:30
};
};
2024-03-08 18:59:53 +05:30
nixosConfigurations = {
system = lib.nixosSystem {
system = systemSettings.system;
modules = [
(./. + "/profiles" + ("/" + systemSettings.profile) + "/configuration.nix")
2024-08-10 04:16:48 +05:30
inputs.lix-module.nixosModules.default
./system/bin/phoenix.nix
2024-03-08 18:59:53 +05:30
]; # load configuration.nix from selected PROFILE
specialArgs = {
# pass config variables from above
inherit pkgs-stable;
inherit systemSettings;
inherit userSettings;
inherit inputs;
2024-03-08 18:59:53 +05:30
};
};
2023-05-08 04:17:40 +05:30
};
2024-06-24 06:56:21 +05:30
nixOnDroidConfigurations = {
2024-06-24 20:08:05 +05:30
inherit pkgs;
default = inputs.nix-on-droid.lib.nixOnDroidConfiguration {
modules = [ ./profiles/nix-on-droid/configuration.nix ];
};
extraSpecialArgs = {
# pass config variables from above
inherit pkgs-stable;
inherit pkgs-emacs;
inherit systemSettings;
inherit userSettings;
inherit inputs;
2024-06-24 06:56:21 +05:30
};
};
2024-03-08 18:59:53 +05:30
packages = forAllSystems (system:
let pkgs = nixpkgsFor.${system};
in {
default = self.packages.${system}.install;
2024-03-08 18:59:53 +05:30
install = pkgs.writeShellApplication {
name = "install";
runtimeInputs = with pkgs; [ git ]; # I could make this fancier by adding other deps
2024-03-08 18:59:53 +05:30
text = ''${./install.sh} "$@"'';
};
});
2024-02-25 23:44:05 +05:30
2024-03-09 06:13:56 +05:30
apps = forAllSystems (system: {
default = self.apps.${system}.install;
2024-02-25 23:44:05 +05:30
2024-03-09 06:13:56 +05:30
install = {
type = "app";
program = "${self.packages.${system}.install}/bin/install";
};
});
2024-03-08 18:59:53 +05:30
};
inputs = {
2024-08-10 04:16:48 +05:30
lix-module = {
url = "https://git.lix.systems/lix-project/nixos-module/archive/2.90.0.tar.gz";
inputs.nixpkgs.follows = "nixpkgs";
};
nixpkgs.url = "nixpkgs/nixos-unstable";
nixpkgs-stable.url = "nixpkgs/nixos-24.05";
emacs-pin-nixpkgs.url = "nixpkgs/f72123158996b8d4449de481897d855bc47c7bf6";
kdenlive-pin-nixpkgs.url = "nixpkgs/cfec6d9203a461d9d698d8a60ef003cac6d0da94";
nwg-dock-hyprland-pin-nixpkgs.url = "nixpkgs/2098d845d76f8a21ae4fe12ed7c7df49098d3f15";
home-manager-unstable.url = "github:nix-community/home-manager/master";
home-manager-unstable.inputs.nixpkgs.follows = "nixpkgs";
2024-07-16 19:08:11 +05:30
home-manager-stable.url = "github:nix-community/home-manager/release-24.05";
home-manager-stable.inputs.nixpkgs.follows = "nixpkgs-stable";
2024-06-24 06:56:21 +05:30
nix-on-droid = {
url = "github:nix-community/nix-on-droid/master";
inputs.nixpkgs.follows = "nixpkgs";
inputs.home-manager.follows = "home-manager-unstable";
};
hyprland = {
type = "git";
url = "https://code.hyprland.org/hyprwm/Hyprland.git";
submodules = true;
rev = "c7b72790bd63172f04ee86784d4cb2a400532927"; #v0.42.0
inputs.nixpkgs.follows = "nixpkgs";
};
hyprland-plugins = {
type = "git";
url = "https://code.hyprland.org/hyprwm/hyprland-plugins.git";
rev = "b73d7b901d8cb1172dd25c7b7159f0242c625a77"; #v0.42.0
inputs.hyprland.follows = "hyprland";
};
hyprlock = {
type = "git";
url = "https://code.hyprland.org/hyprwm/hyprlock.git";
rev = "58e1a4a4997728be886a46d031514b3f09763c5d";
inputs.nixpkgs.follows = "nixpkgs";
};
hyprgrass.url = "github:horriblename/hyprgrass/0bb3b822053c813ab6f695c9194089ccb5186cc3";
2024-06-26 07:00:45 +05:30
hyprgrass.inputs.hyprland.follows = "hyprland";
2024-08-14 06:18:37 +05:30
# FIXME emacsng doesn't build or dumps core
#emacsng.url = "github:emacs-ng/emacs-ng/58fcf8c";
#emacsng.inputs.nixpkgs.follows = "nixpkgs";
2024-08-14 03:24:45 +05:30
2024-02-04 21:06:13 +05:30
nix-doom-emacs.url = "github:nix-community/nix-doom-emacs";
nix-doom-emacs.inputs.nixpkgs.follows = "emacs-pin-nixpkgs";
2024-02-04 21:06:13 +05:30
nix-straight.url = "github:librephoenix/nix-straight.el/pgtk-patch";
nix-straight.flake = false;
nix-doom-emacs.inputs.nix-straight.follows = "nix-straight";
eaf = {
url = "github:emacs-eaf/emacs-application-framework";
flake = false;
};
eaf-browser = {
url = "github:emacs-eaf/eaf-browser";
flake = false;
};
org-nursery = {
url = "github:chrisbarrett/nursery";
flake = false;
};
2023-09-23 22:24:31 +05:30
org-yaap = {
url = "gitlab:tygrdev/org-yaap";
flake = false;
};
2023-10-06 01:27:44 +05:30
org-side-tree = {
url = "github:localauthor/org-side-tree";
flake = false;
};
org-timeblock = {
url = "github:ichernyshovvv/org-timeblock";
flake = false;
};
2024-04-03 09:44:02 +05:30
org-krita = {
2024-04-14 01:31:51 +05:30
url = "github:librephoenix/org-krita";
2024-04-03 09:44:02 +05:30
flake = false;
};
org-xournalpp = {
url = "gitlab:vherrmann/org-xournalpp";
flake = false;
};
2024-04-14 01:31:22 +05:30
org-sliced-images = {
url = "github:jcfk/org-sliced-images";
flake = false;
};
2024-06-26 01:25:20 +05:30
magit-file-icons = {
2024-06-28 23:03:40 +05:30
url = "github:librephoenix/magit-file-icons/abstract-icon-getters-compat";
2024-06-26 01:25:20 +05:30
flake = false;
};
phscroll = {
url = "github:misohena/phscroll";
flake = false;
};
mini-frame = {
url = "github:muffinmad/emacs-mini-frame";
flake = false;
};
stylix.url = "github:danth/stylix";
rust-overlay.url = "github:oxalica/rust-overlay";
blocklist-hosts = {
url = "github:StevenBlack/hosts";
flake = false;
};
};
2023-05-08 04:17:40 +05:30
}