Initial commit: Nomarchy NixOS configuration

An opinionated NixOS configuration with Hyprland, featuring:

- Modular flake-based architecture
- Parameterized user configuration (username, timezone, locale, etc.)
- Classical/antiquity theme with Thomas Cole wallpapers
- Full Hyprland setup with waybar, rofi, swaync
- Custom utility scripts (screenshots, screen recording, WiFi QR)
- Neovim with LSP support
- Interactive installer for existing NixOS systems
- ISO builder for fresh installations

Flake outputs:
- nixosConfigurations.example - Test configuration
- nixosConfigurations.installer - ISO installer
- packages.iso - Bootable ISO image
- apps.default - Interactive installer
- lib.mkHost - Host builder function
- templates.default - Starter template

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-02-15 02:44:33 -05:00
commit 58e4232f2f
50 changed files with 3853 additions and 0 deletions

267
modules/home/waybar.nix Normal file
View File

@@ -0,0 +1,267 @@
# Waybar status bar configuration
{
config,
lib,
pkgs,
...
}: {
programs.waybar = {
enable = true;
style = ''
* {
font-family: "JetBrainsMono Nerd Font Mono", "JetBrainsMono NF", monospace;
font-size: 14px;
min-height: 0;
}
window#waybar {
background-color: rgba(26, 22, 17, 0.92);
color: #d4c4a8;
border-bottom: 2px solid rgba(139, 90, 43, 0.6);
}
#workspaces button {
padding: 0 8px;
color: #8b7355;
border-radius: 4px;
margin: 4px 2px;
}
#workspaces button.active {
color: #d4a857;
background-color: rgba(180, 134, 11, 0.2);
}
#workspaces button:hover {
background-color: rgba(139, 90, 43, 0.15);
}
#custom-help {
padding: 0 10px;
margin: 4px 2px;
border-radius: 4px;
background-color: rgba(212, 168, 87, 0.3);
color: #d4a857;
font-weight: bold;
}
#custom-help:hover {
background-color: rgba(212, 168, 87, 0.5);
}
#clock, #battery, #network, #pulseaudio, #cpu, #memory, #tray {
padding: 0 12px;
margin: 4px 2px;
border-radius: 4px;
background-color: rgba(45, 38, 32, 0.85);
}
#clock {
color: #d4a857;
font-weight: bold;
}
#battery {
color: #8a9a5b;
}
#battery.charging {
color: #d4a857;
}
#battery.warning:not(.charging) {
color: #c9a227;
}
#battery.critical:not(.charging) {
color: #a63d40;
animation: blink 0.5s linear infinite alternate;
}
#network {
color: #7a9cb8;
}
#network.disconnected {
color: #a63d40;
}
#bluetooth {
color: #7a9cb8;
}
#bluetooth.connected {
color: #8a9a5b;
}
#bluetooth.disabled {
color: #5c5346;
}
#language {
color: #c67b5c;
font-weight: bold;
min-width: 20px;
}
#pulseaudio {
color: #c9a227;
}
#pulseaudio.muted {
color: #5c5346;
}
#cpu {
color: #b85c38;
}
#memory {
color: #c67b5c;
}
#tray {
padding: 0 8px;
}
@keyframes blink {
to {
background-color: #722f37;
color: #d4c4a8;
}
}
#custom-recording {
color: #ff4444;
font-weight: bold;
animation: blink 1s linear infinite;
padding: 0 10px;
}
'';
settings = {
mainBar = {
layer = "top";
position = "top";
height = 34;
spacing = 4;
modules-left = ["custom/help" "hyprland/workspaces" "hyprland/window"];
modules-center = ["custom/recording" "clock"];
modules-right = ["hyprland/language" "tray" "cpu" "memory" "pulseaudio" "bluetooth" "network" "battery"];
"custom/recording" = {
exec = "[ -f /tmp/recording-status ] && echo '󰑊 REC' || echo ''";
interval = 1;
format = "{}";
on-click = "~/.local/bin/screen-record";
tooltip = "Click to stop recording";
};
"custom/help" = {
format = "?";
tooltip = "Quick Actions (Super+/)";
on-click = "~/.local/bin/quick-actions";
};
"hyprland/workspaces" = {
format = "{name}";
on-click = "activate";
};
"hyprland/window" = {
max-length = 50;
separate-outputs = true;
};
clock = {
format = "{:%H:%M %a %b %d}";
format-alt = "{:%I:%M %p %a %b %d}";
tooltip-format = "<tt><small>{calendar}</small></tt>";
calendar = {
mode = "month";
weeks-pos = "right";
format = {
months = "<span color='#d4a857'><b>{}</b></span>";
days = "<span color='#d4c4a8'>{}</span>";
weeks = "<span color='#8b7355'>W{}</span>";
weekdays = "<span color='#c9a227'>{}</span>";
today = "<span color='#a63d40'><b><u>{}</u></b></span>";
};
};
};
cpu = {
format = "CPU {usage}%";
tooltip = true;
interval = 2;
};
memory = {
format = "RAM {percentage}%";
tooltip-format = "{used:0.1f}GB / {total:0.1f}GB";
interval = 2;
};
battery = {
states = {
warning = 30;
critical = 15;
};
format = "BAT {capacity}%";
format-charging = "CHR {capacity}%";
format-plugged = "PLG {capacity}%";
format-icons = ["" "" "" "" ""];
tooltip-format = "{timeTo}";
};
network = {
format-wifi = "󰖩 {essid}";
format-ethernet = "󰈀 {ipaddr}";
format-disconnected = "󰖪 ";
tooltip-format-wifi = "{essid} {signalStrength}% {ipaddr}";
tooltip-format-ethernet = "IP: {ipaddr}";
on-click = "~/.local/bin/wifi-menu";
on-click-right = "nm-connection-editor";
};
bluetooth = {
format = "󰂯";
format-connected = "󰂱 {device_alias}";
format-disabled = "󰂲";
tooltip-format = "{controller_alias}\n{status}";
tooltip-format-connected = "{controller_alias}\n{device_enumerate}";
tooltip-format-enumerate-connected = "{device_alias}";
on-click = "blueman-manager";
on-click-right = "~/.local/bin/bluetooth-toggle";
};
"hyprland/language" = {
format = "{}";
format-en = "EN";
format-gr = "ΕΛ";
tooltip-format = "{long} ({variant})";
on-click = "hyprctl switchxkblayout all next";
};
pulseaudio = {
format = "{icon} {volume}%";
format-muted = "󰖁 ";
format-icons = {
default = ["󰕿" "󰖀" "󰕾"];
headphone = "󰋋";
};
tooltip-format = "{desc}";
on-click = "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle";
on-click-right = "pavucontrol";
on-scroll-up = "wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+";
on-scroll-down = "wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-";
};
tray = {
icon-size = 18;
spacing = 8;
};
};
};
};
}