[Hyprland,Eww] Refactors configs so that I can share more between Vega and Altair

This commit is contained in:
2026-06-01 16:54:06 -07:00
parent e078067a5e
commit e936b9da8f
12 changed files with 274 additions and 124 deletions

View File

@@ -1,15 +1,48 @@
{ pkgs, ... }:
{
home = {
packages = with pkgs; [
# For Noto Sans NF
nerd-fonts.noto
];
file.".config/eww".source = ./config;
config,
pkgs,
lib,
...
}:
{
options = {
programs.eww.widgets = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
};
};
programs.eww = {
enable = true;
config = {
home = {
packages = with pkgs; [
# For Noto Sans NF
nerd-fonts.noto
];
file.".config/eww".source = ./config;
};
programs.eww = {
enable = true;
};
systemd.user.services.eww = lib.mkIf (config.programs.eww.widgets != [ ]) {
Unit = {
Description = "Eww widgets";
After = [ "hyprland-session.target" ]; # Start only after hyprland
PartOf = [ "hyprland-session.target" ]; # Force it to exit if hyprland does
};
Service = {
Type = "oneshot";
RemainAfterExit = true;
ExecStart = "${pkgs.eww}/bin/eww open ${lib.concatStringsSep " " config.programs.eww.widgets}";
ExecStop = "${pkgs.eww}/bin/eww kill";
};
Install = {
WantedBy = [ "hyprland-session.target" ];
};
};
};
}

View File

@@ -1,10 +1,5 @@
hl.on("hyprland.start", function()
hl.exec_cmd("nm-applet")
-- hl.exec_cmd("sleep 2 && hyprpm reload -n")
-- hl.exec_cmd("systemctl --user start hyprpolkitagent")
hl.exec_cmd("gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark'")
hl.exec_cmd("gsettings set org.gnome.desktop.interface gtk-theme 'Adwaita-dark'")
hl.exec_cmd("wpaperd")
hl.exec_cmd("sleep 2 && eww open-many primary-statusbar secondary-statusbar")
hl.exec_cmd("xrandr --output DP-2 --primary")
end)

View File

@@ -84,25 +84,25 @@ hl.device({
sensitivity = -0.200000,
})
hl.monitor({
output = "DP-2",
mode = "3440x1440@164",
position = "0x0",
})
hl.monitor({
output = "DP-1",
mode = "2560x1440",
position = "-1440x-510",
-- 0 -> normal (no transforms)
-- 1 -> 90 degrees
-- 2 -> 180 degrees
-- 3 -> 270 degrees
-- 4 -> flipped
-- 5 -> flipped + 90 degrees
-- 6 -> flipped + 180 degrees
-- 7 -> flipped + 270 degrees
transform = 1,
})
-- hl.monitor({
-- output = "DP-2",
-- mode = "3440x1440@164",
-- position = "0x0",
-- })
-- hl.monitor({
-- output = "DP-1",
-- mode = "2560x1440",
-- position = "-1440x-510",
-- -- 0 -> normal (no transforms)
-- -- 1 -> 90 degrees
-- -- 2 -> 180 degrees
-- -- 3 -> 270 degrees
-- -- 4 -> flipped
-- -- 5 -> flipped + 90 degrees
-- -- 6 -> flipped + 180 degrees
-- -- 7 -> flipped + 270 degrees
-- transform = 1,
-- })
for i = 1, 10 do
hl.workspace_rule({ workspace = i, monitor = "DP-1", default_name = "L" .. tostring(i) })

View File

@@ -1,8 +1,15 @@
{ pkgs, inputs, ... }:
{
pkgs,
inputs,
config,
lib,
...
}:
{
imports = [
../swaylock.nix
./hypridle.nix
../../options/monitors.nix
];
xdg.configFile = {
@@ -11,9 +18,27 @@
recursive = true;
};
"hypr/base.lua" = {
source = ./config/hyprland.lua;
"hypr/monitors.lua" = {
text = lib.concatStrings (
lib.imap0 (
idx:
{ name, value }:
let
offset = idx * 10;
in
lib.concatMapStrings (
i:
let
ws = offset + i;
in
''
hl.workspace_rule({ workspace = ${toString ws}, monitor = "${name}", default_name = "${name}_${toString i}" })
''
) (lib.range 1 10)
) (lib.attrsToList config.hardware.monitors)
);
};
"hypr/config" = {
source = ./config;
recursive = true;
@@ -43,6 +68,7 @@
];
extraConfig = ''
require("monitors")
require("config.hyprland")
'';

View File

@@ -1,4 +1,5 @@
monitors: _: {
{ config, ... }:
{
services.hyprpaper = {
enable = true;
settings = {
@@ -9,7 +10,7 @@ monitors: _: {
timeout = 3600;
recursive = true;
fit_mode = "cover";
}) monitors;
}) (builtins.attrNames config.hardware.monitors);
};
};
}

View File

@@ -1,4 +1,9 @@
{ pkgs, inputs, ... }:
{
config,
pkgs,
inputs,
...
}:
let
zen-browser = inputs.zen-browser.packages.${pkgs.stdenv.hostPlatform.system}.default;
in
@@ -11,6 +16,7 @@ in
../apps/element.nix
../apps/discord.nix
./terminal.nix
../options/monitors.nix
];
home = {
@@ -59,7 +65,10 @@ in
programs = {
# browsers
firefox.enable = true;
firefox = {
enable = true;
configPath = "${config.xdg.configHome}/mozilla/firefox";
};
chromium.enable = true;
};

View File

@@ -1,4 +1,5 @@
monitors: _: {
{ config }:
{
# NOTE: Wpaperd displays wallpaper upside-down on 90´ ccw rotated
# monitors as of 26.05
services.wpaperd = {
@@ -12,7 +13,7 @@ monitors: _: {
# containes the current images.
path = "~/Pictures/Wallpaper/${mon}";
};
}) monitors
}) (builtins.attrNames config.hardware.monitors)
)
// {
default = {

View File

@@ -0,0 +1,71 @@
{ lib, config, ... }:
{
options =
with lib;
with types;
{
hardware.monitors = mkOption {
type = lazyAttrsOf (submodule {
options = {
mode = mkOption {
type = str;
default = "auto";
};
position = mkOption {
type = str;
default = "auto";
};
rotation = mkOption {
type = enum [
"none"
"90"
"180"
"270"
];
default = "none";
};
flipped = mkOption {
type = bool;
default = false;
};
};
});
default = { };
description = "Monitor configuration";
};
};
# config = {
# wayland.windowManager.hyprland.settings.monitors =
# let
# transformMap = {
# "none" = {
# normal = 0;
# flipped = 4;
# };
# "90" = {
# normal = 1;
# flipped = 5;
# };
# "180" = {
# normal = 2;
# flipped = 6;
# };
# "270" = {
# normal = 3;
# flipped = 7;
# };
# };
#
# monitorTransform =
# m:
# let
# t = transformMap.${m.rotation};
# in
# if m.flipped then t.flipped else t.normal;
# monitorString =
# name: m: "${name}, ${m.mode}, ${m.position}, 1, transform, ${toString (monitorTransform m)}";
# in
# lib.mapAttrsToList monitorString config.hardware.monitors;
# };
}

View File

@@ -1,33 +1,24 @@
{ ... }:
let
monitors = [
"DP-1"
"DP-2"
];
in
{ pkgs, ... }:
{
imports =
map (x: ../../../home-manager + x) [
"/features/astronomy.nix"
"/features/chat.nix"
"/features/development/development.nix"
"/features/development/docker.nix"
"/features/development/haskell.nix"
"/features/development/markdown.nix"
"/features/development/typescript.nix"
"/features/development/vscode.nix"
"/features/eww"
"/features/email.nix"
"/features/gaming.nix"
"/features/image-editing.nix"
"/features/linux-desktop.nix"
"/features/mounts/mcp-archive.nix"
"/features/notes.nix"
"/features/3d-printing.nix"
]
++ [
(import ../../../home-manager/features/hyprpaper.nix monitors)
];
imports = map (x: ../../../home-manager + x) [
"/features/astronomy.nix"
"/features/chat.nix"
"/features/development/development.nix"
"/features/development/docker.nix"
"/features/development/haskell.nix"
"/features/development/markdown.nix"
"/features/development/typescript.nix"
"/features/development/vscode.nix"
"/features/eww"
"/features/email.nix"
"/features/gaming.nix"
"/features/image-editing.nix"
"/features/linux-desktop.nix"
"/features/mounts/mcp-archive.nix"
"/features/notes.nix"
"/features/3d-printing.nix"
"/features/hyprpaper.nix"
];
home = {
stateVersion = "24.11";
@@ -48,17 +39,34 @@ in
};
};
# TODO: Merge into lua config
hardware.monitors = {
"DP-2" = {
position = "0x0";
mode = "3440x1440@164";
};
"DP-1" = {
mode = "2560x1440";
position = "-1440x-510";
rotation = "90";
};
};
programs.eww.widgets = [
"primary-statusbar"
"secondary-statusbar"
];
# TODO: Still merging these into the LUA config
# wayland.windowManager.hyprland.settings = {
# exec-once = [
# exec_once = [
# # Set up eww here because it's based on the monitor configuration
# "sleep 2 && eww open-many primary-statusbar secondary-statusbar"
# # Set DP-2 as the primary monitor, otherwise it defaults to DP-1 because it's first in the list.
# "xrandr --output DP-2 --primary"
# ];
# windowrule = [
# # Rofi doesn't center properly when I have the two asymetric monitors, so we need hyprland to manage it.
# "match:class Rofi, center on"
# ];
# # windowrule = [
# # # Rofi doesn't center properly when I have the two asymetric monitors, so we need hyprland to manage it.
# # "match:class Rofi, center on"
# # ];
# };
}

View File

@@ -9,7 +9,8 @@
# Enable networking
networking.networkmanager.enable = true;
# Disable wpa-supplicant to avoid conflicts with network manager.
networking.wireless.enable = false;
# Appears this is not needed as of 26.05
# networking.wireless.enable = true;
# Set your time zone.
time.timeZone = "America/Los_Angeles";

View File

@@ -1,58 +1,62 @@
{ pkgs, ... }:
{
imports =
map (x: ../../../home-manager + x) [
"/features/chat.nix"
"/features/development/development.nix"
"/features/development/docker.nix"
"/features/development/haskell.nix"
"/features/development/markdown.nix"
"/features/development/typescript.nix"
"/features/email.nix"
"/features/eww"
"/features/image-editing.nix"
"/features/linux-desktop.nix"
"/features/notes.nix"
]
++ [
(import ../../../home-manager/features/hyprpaper.nix [ "HDMI-A-1" ])
];
home.packages = with pkgs; [
slack
zoom-us
chromium
imports = map (x: ../../../home-manager + x) [
"/features/chat.nix"
"/features/development/development.nix"
"/features/development/docker.nix"
"/features/development/haskell.nix"
"/features/development/markdown.nix"
"/features/development/typescript.nix"
"/features/email.nix"
"/features/eww"
"/features/image-editing.nix"
"/features/linux-desktop.nix"
"/features/notes.nix"
"/features/hyprpaper.nix"
];
home.stateVersion = "24.11";
home = {
stateVersion = "24.11";
home.username = "drew";
home.homeDirectory = "/home/drew";
username = "drew";
homeDirectory = "/home/drew";
};
programs.git.settings.user = {
name = "Drew Haven";
email = "periodic@blazestar.net";
};
hardware.monitors = {
"HDMI-A-1" = {
position = "0x0";
mode = "3440x1440@75.05t s";
};
};
programs.eww.widgets = [
"vertical-statusbar"
];
# TODO: Merge into LUA configs
# wayland.windowManager.hyprland.settings = {
# # Set up eww here because it's based on the monitor configuration
# # Eww is idempotent, so it's fine to just run it on every reload to make sure things are open
# exec-once = [
# "sleep 2 && eww open-many vertical-statusbar"
# ];
# # Set up workspaces for this system
# # See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules
# workspace = [
# "1, defaultName:1"
# "2, defaultName:2"
# "3, defaultName:3"
# "4, defaultName:4"
# "5, defaultName:5"
# "6, defaultName:6"
# "7, defaultName:7"
# "8, defaultName:8"
# "9, defaultName:9"
# ];
# };
wayland.windowManager.hyprland.settings = {
# Set up eww here because it's based on the monitor configuration
# Eww is idempotent, so it's fine to just run it on every reload to make sure things are open
# exec_once = [
# "sleep 2 && eww open-many vertical-statusbar"
# ];
# Set up workspaces for this system
# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules
# workspace = [
# "1, defaultName:1"
# "2, defaultName:2"
# "3, defaultName:3"
# "4, defaultName:4"
# "5, defaultName:5"
# "6, defaultName:6"
# "7, defaultName:7"
# "8, defaultName:8"
# "9, defaultName:9"
# ];
};
}

View File

@@ -55,4 +55,5 @@
# Graphics settings
# Using the default production drivers.
graphics.enable = true;
}