home: centralize theme and make home-manager feature-aware
- add home/theme.nix as the single Silicon Volt palette and pass it to home modules via extraSpecialArgs - drive foot, hyprland, hyprlock, mako, fzf, starship, rofi and the herdr picker from that palette; raw config files use @color@ tokens substituted at build time - pass my = config.my into home-manager; add my.pi.enable, my.flakeDir - gate home/pi.nix on my.pi.enable (enabled on hades) - route zshconf/hyprconf aliases and FLAKE_CONFIG through my.flakeDir - rename the hyprland monitor option volt.monitors -> hypr.monitors - fix use_auto_tmux command-substitution bug in zsh/init.zsh - track home/nvim/config/lazy-lock.json for reproducible plugins - document theming and toggles in the README
This commit is contained in:
15
README.md
15
README.md
@@ -36,13 +36,14 @@ my = {
|
||||
username = "anish"; # default; change for a different primary user
|
||||
gaming.enable = false; # Steam, Gamemode, MangoHud
|
||||
ai.local.enable = false; # Ollama, ComfyUI, Open WebUI
|
||||
pi.enable = false; # pi coding agent (home-manager)
|
||||
};
|
||||
```
|
||||
|
||||
4. Declare host-specific displays in `hosts/<name>/default.nix`:
|
||||
|
||||
```nix
|
||||
home-manager.users.anish.volt.monitors = [
|
||||
home-manager.users.anish.hypr.monitors = [
|
||||
{
|
||||
output = "eDP-1"; # or "desc:<panel description>"
|
||||
mode = "2880x1800@120Hz"; # or "preferred"
|
||||
@@ -54,7 +55,7 @@ home-manager.users.anish.volt.monitors = [
|
||||
];
|
||||
```
|
||||
|
||||
The `volt.monitors` default (any output @ preferred) keeps every machine working
|
||||
The `hypr.monitors` default (any output @ preferred) keeps every machine working
|
||||
out of the box; hosts override only what they need. Hosts without an NVIDIA GPU
|
||||
simply don't import `modules/hardware/nvidia.nix` — all vendor env vars live there,
|
||||
while the vendor-neutral `hardware.graphics` stack lives in `modules/graphical`.
|
||||
@@ -68,7 +69,17 @@ import lists:
|
||||
| Option | Enables |
|
||||
| --- | --- |
|
||||
| `my.username` | Primary user (users, home-manager, getty autologin) |
|
||||
| `my.flakeDir` | Checkout path used by the `rebuild` helper and `zshconf`/`hyprconf` aliases |
|
||||
| `my.gaming.enable` | Steam, Gamemode, MangoHud |
|
||||
| `my.ai.local.enable` | Ollama (CUDA), ComfyUI, Open WebUI |
|
||||
| `my.pi.enable` | pi coding agent (home-manager) |
|
||||
|
||||
Hardware modules remain explicit imports per host (e.g. `modules/hardware/nvidia.nix`).
|
||||
|
||||
## Theming
|
||||
|
||||
The Silicon Volt palette lives in one place, `home/theme.nix`, and is passed to
|
||||
every home-manager module through `extraSpecialArgs`. Tools that only accept a
|
||||
raw config file (starship, rofi, the herdr picker) carry `@color@` placeholders
|
||||
that are substituted from the same palette at build time, so changing an accent
|
||||
means editing one file.
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
inputs:
|
||||
let
|
||||
system = "x86_64-linux";
|
||||
theme = import ./home/theme.nix;
|
||||
|
||||
commonModules = [
|
||||
./modules/core
|
||||
@@ -56,7 +57,10 @@
|
||||
home-manager = {
|
||||
useGlobalPkgs = true;
|
||||
useUserPackages = true;
|
||||
extraSpecialArgs = { inherit inputs; };
|
||||
extraSpecialArgs = {
|
||||
inherit inputs theme;
|
||||
my = config.my;
|
||||
};
|
||||
backupFileExtension = "backup";
|
||||
users.${config.my.username} = import ./home;
|
||||
};
|
||||
|
||||
@@ -1,4 +1,10 @@
|
||||
{ pkgs, inputs, ... }:
|
||||
{
|
||||
pkgs,
|
||||
lib,
|
||||
inputs,
|
||||
theme,
|
||||
...
|
||||
}:
|
||||
|
||||
let
|
||||
herdrPkg =
|
||||
@@ -13,7 +19,35 @@ let
|
||||
else
|
||||
(pkgs.herdr or null);
|
||||
|
||||
herdrPicker = pkgs.writeShellScriptBin "herdr-picker" (builtins.readFile ./scripts/herdr-picker.sh);
|
||||
# Inject the shared palette into the picker script (see home/theme.nix).
|
||||
herdrPicker = pkgs.writeShellScriptBin "herdr-picker" (
|
||||
lib.replaceStrings
|
||||
[
|
||||
"@bg@"
|
||||
"@glass@"
|
||||
"@fg@"
|
||||
"@fgBright@"
|
||||
"@muted@"
|
||||
"@volt@"
|
||||
"@voltLight@"
|
||||
"@coral@"
|
||||
"@blue@"
|
||||
"@surface@"
|
||||
]
|
||||
[
|
||||
theme.colors.bgPrimary
|
||||
theme.colors.glassBg
|
||||
theme.colors.textSecondary
|
||||
theme.colors.textPrimary
|
||||
theme.colors.textMuted
|
||||
theme.colors.accentVolt
|
||||
theme.colors.accentVoltLight
|
||||
theme.colors.accentCoral
|
||||
theme.colors.accentBlue
|
||||
theme.colors.surfaceVariant
|
||||
]
|
||||
(builtins.readFile ./scripts/herdr-picker.sh)
|
||||
);
|
||||
in
|
||||
{
|
||||
home.packages = (if herdrPkg != null then [ herdrPkg ] else [ ]) ++ [
|
||||
@@ -47,41 +81,38 @@ in
|
||||
hide-when-typing = "yes";
|
||||
};
|
||||
|
||||
# Silicon Volt palette, sourced from home/theme.nix.
|
||||
colors-dark = {
|
||||
# Silicon Volt palette (matches home/hypr theme + mako):
|
||||
# bgPrimary #131313, bgSecondary #0e0e0e, glassBg #1c1b1b,
|
||||
# textPrimary #ffffff, textSecondary #e5e2e1, textMuted #adaaaa,
|
||||
# accents: volt #cffc00, coral #ff7a59, blue #00bfff
|
||||
alpha = 0.92;
|
||||
background = "131313";
|
||||
foreground = "e5e2e1";
|
||||
background = theme.bare.bgPrimary;
|
||||
foreground = theme.bare.textSecondary;
|
||||
|
||||
# Cursor text and cursor (background) colors
|
||||
cursor = "0e0e0e cffc00";
|
||||
cursor = "${theme.bare.bgSecondary} ${theme.bare.accentVolt}";
|
||||
|
||||
regular0 = "0e0e0e"; # bgSecondary
|
||||
regular1 = "ff7a59"; # accentCoral
|
||||
regular2 = "cffc00"; # accentVolt (green)
|
||||
regular3 = "e3ff66"; # accentVoltLight (yellow)
|
||||
regular4 = "00bfff"; # accentBlue
|
||||
regular5 = "c6c6c7"; # Neutral Gray (magenta)
|
||||
regular6 = "66d9ff"; # Light Cyan
|
||||
regular7 = "e5e2e1"; # textSecondary
|
||||
regular0 = theme.bare.bgSecondary;
|
||||
regular1 = theme.bare.accentCoral;
|
||||
regular2 = theme.bare.accentVolt;
|
||||
regular3 = theme.bare.accentVoltLight;
|
||||
regular4 = theme.bare.accentBlue;
|
||||
regular5 = theme.bare.neutralGray;
|
||||
regular6 = theme.bare.lightCyan;
|
||||
regular7 = theme.bare.textSecondary;
|
||||
|
||||
# Bright Colors
|
||||
bright0 = "2a2929"; # surfaceVariant
|
||||
bright1 = "ff9a82"; # Bright Coral
|
||||
bright2 = "dfff66"; # Bright Lime
|
||||
bright3 = "f0ff8c"; # Bright Volt
|
||||
bright4 = "66d9ff"; # Bright Blue
|
||||
bright5 = "e0e0e1"; # Bright Gray
|
||||
bright6 = "99e6ff"; # Bright Cyan
|
||||
bright7 = "ffffff"; # textPrimary
|
||||
bright0 = theme.bare.surfaceVariant;
|
||||
bright1 = theme.bare.brightCoral;
|
||||
bright2 = theme.bare.brightLime;
|
||||
bright3 = theme.bare.brightVolt;
|
||||
bright4 = theme.bare.lightCyan;
|
||||
bright5 = theme.bare.brightGray;
|
||||
bright6 = theme.bare.brightCyan;
|
||||
bright7 = theme.bare.textPrimary;
|
||||
|
||||
# Selection & URLs - volt lime selection like the site
|
||||
selection-foreground = "0e0e0e";
|
||||
selection-background = "cffc00";
|
||||
urls = "00bfff";
|
||||
selection-foreground = theme.bare.bgSecondary;
|
||||
selection-background = theme.bare.accentVolt;
|
||||
urls = theme.bare.accentBlue;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
pkgs,
|
||||
lib,
|
||||
config,
|
||||
theme,
|
||||
...
|
||||
}:
|
||||
|
||||
@@ -58,9 +58,9 @@ in
|
||||
enable = true;
|
||||
|
||||
settings = {
|
||||
background-color = "#1c1b1bee";
|
||||
text-color = "#e5e2e1";
|
||||
border-color = "#cffc00";
|
||||
background-color = "${theme.colors.glassBg}ee";
|
||||
text-color = theme.colors.textSecondary;
|
||||
border-color = theme.colors.accentVolt;
|
||||
border-size = 1;
|
||||
border-radius = 0;
|
||||
width = 420;
|
||||
@@ -73,13 +73,13 @@ in
|
||||
max-icon-size = 48;
|
||||
|
||||
"urgency=critical" = {
|
||||
border-color = "#ff7a59";
|
||||
text-color = "#ffffff";
|
||||
border-color = theme.colors.accentCoral;
|
||||
text-color = theme.colors.textPrimary;
|
||||
default-timeout = 0;
|
||||
};
|
||||
"urgency=low" = {
|
||||
border-color = "#2a2929";
|
||||
text-color = "#adaaaa";
|
||||
border-color = theme.colors.surfaceVariant;
|
||||
text-color = theme.colors.textMuted;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
lib,
|
||||
config,
|
||||
theme,
|
||||
...
|
||||
}:
|
||||
|
||||
@@ -12,11 +13,11 @@ in
|
||||
# Per-host monitor configuration.
|
||||
#
|
||||
# Hosts declare their displays once, in hosts/<host>/default.nix, via:
|
||||
# home-manager.users.<my.username>.volt.monitors = [ { ... } ];
|
||||
# home-manager.users.<my.username>.hypr.monitors = [ { ... } ];
|
||||
# and the setting flows into Hyprland here. The default (empty output +
|
||||
# preferred mode) works on any machine with any display.
|
||||
# -------------------------------------------------------------------------
|
||||
options.volt.monitors = lib.mkOption {
|
||||
options.hypr.monitors = lib.mkOption {
|
||||
description = "Hyprland monitor rules for this host";
|
||||
type = lib.types.listOf (
|
||||
lib.types.submodule {
|
||||
@@ -69,7 +70,7 @@ in
|
||||
;
|
||||
}
|
||||
// (lib.optionalAttrs (m.vrr != null) { inherit (m) vrr; })
|
||||
) config.volt.monitors;
|
||||
) config.hypr.monitors;
|
||||
|
||||
wayland.windowManager.hyprland = {
|
||||
enable = true;
|
||||
@@ -91,7 +92,7 @@ in
|
||||
};
|
||||
|
||||
# -----------------------------------------------------------------------
|
||||
# 2. Monitors (hl.monitor) - declared per-host via volt.monitors
|
||||
# 2. Monitors (hl.monitor) - declared per-host via hypr.monitors
|
||||
# (see hosts/<host>/default.nix); defaults to any display @ preferred.
|
||||
# -----------------------------------------------------------------------
|
||||
|
||||
@@ -143,12 +144,12 @@ in
|
||||
# Silicon Volt: electric lime gradient on focus, glass gray at rest
|
||||
active_border = {
|
||||
colors = [
|
||||
"rgba(cffc00ee)"
|
||||
"rgba(e3ff66ee)"
|
||||
"rgba(${theme.bare.accentVolt}ee)"
|
||||
"rgba(${theme.bare.accentVoltLight}ee)"
|
||||
];
|
||||
angle = 45;
|
||||
};
|
||||
inactive_border = "rgba(ffffff14)";
|
||||
inactive_border = "rgba(${theme.bare.textPrimary}14)";
|
||||
};
|
||||
layout = "dwindle";
|
||||
};
|
||||
@@ -158,20 +159,20 @@ in
|
||||
font_size = 14;
|
||||
font_family = "JetBrainsMono Nerd Font";
|
||||
col = {
|
||||
active = "rgba(cffc0022)";
|
||||
inactive = "rgba(ffffff08)";
|
||||
active = "rgba(${theme.bare.accentVolt}22)";
|
||||
inactive = "rgba(${theme.bare.textPrimary}08)";
|
||||
};
|
||||
};
|
||||
|
||||
col = {
|
||||
border_active = {
|
||||
colors = [
|
||||
"rgba(cffc00ee)"
|
||||
"rgba(e3ff66ee)"
|
||||
"rgba(${theme.bare.accentVolt}ee)"
|
||||
"rgba(${theme.bare.accentVoltLight}ee)"
|
||||
];
|
||||
angle = 45;
|
||||
};
|
||||
border_inactive = "rgba(ffffff14)";
|
||||
border_inactive = "rgba(${theme.bare.textPrimary}14)";
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{ pkgs, ... }:
|
||||
{ theme, ... }:
|
||||
|
||||
{
|
||||
programs.hyprlock = {
|
||||
@@ -32,7 +32,7 @@
|
||||
{
|
||||
monitor = "";
|
||||
text = "$TIME";
|
||||
color = "rgba(ffffffdd)";
|
||||
color = "rgba(${theme.bare.textPrimary}dd)";
|
||||
font_size = 90;
|
||||
font_family = "JetBrainsMono Nerd Font";
|
||||
position = "0, 220";
|
||||
@@ -43,7 +43,7 @@
|
||||
{
|
||||
monitor = "";
|
||||
text = "cmd[update:1000] echo \" $(date +'%A, %B %d') \"";
|
||||
color = "rgba(adaaaaff)";
|
||||
color = "rgba(${theme.bare.textMuted}ff)";
|
||||
font_size = 20;
|
||||
font_family = "JetBrainsMono Nerd Font";
|
||||
position = "0, 120";
|
||||
@@ -54,7 +54,7 @@
|
||||
{
|
||||
monitor = "";
|
||||
text = "NIXOS // SILICON VOLT";
|
||||
color = "rgba(cffc00ee)";
|
||||
color = "rgba(${theme.bare.accentVolt}ee)";
|
||||
font_size = 14;
|
||||
font_family = "JetBrainsMono Nerd Font";
|
||||
position = "0, 60";
|
||||
@@ -65,7 +65,7 @@
|
||||
{
|
||||
monitor = "";
|
||||
text = "cmd[update:3600000] echo \" $USER @ $(hostname) \"";
|
||||
color = "rgba(adaaaa99)";
|
||||
color = "rgba(${theme.bare.textMuted}99)";
|
||||
font_size = 13;
|
||||
font_family = "JetBrainsMono Nerd Font";
|
||||
position = "0, -160";
|
||||
@@ -84,11 +84,11 @@
|
||||
dots_spacing = 0.2;
|
||||
dots_center = true;
|
||||
# Volt lime outline, dark glass interior
|
||||
outer_color = "rgba(cffc00ee)";
|
||||
inner_color = "rgba(1c1b1b, 0.9)";
|
||||
check_color = "rgba(e3ff66ee)";
|
||||
fail_color = "rgba(ff7a59ee)";
|
||||
font_color = "rgba(e5e2e1ff)";
|
||||
outer_color = "rgba(${theme.bare.accentVolt}ee)";
|
||||
inner_color = "rgba(${theme.bare.glassBg}, 0.9)";
|
||||
check_color = "rgba(${theme.bare.accentVoltLight}ee)";
|
||||
fail_color = "rgba(${theme.bare.accentCoral}ee)";
|
||||
font_color = "rgba(${theme.bare.textSecondary}ff)";
|
||||
fail_text = "$FAIL (<b>attempts: $ATTEMPTS</b>)";
|
||||
fade_on_empty = false;
|
||||
placeholder_text = "<i> Enter Password...</i>";
|
||||
|
||||
39
home/nvim/config/lazy-lock.json
Normal file
39
home/nvim/config/lazy-lock.json
Normal file
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"LazyVim": { "branch": "main", "commit": "c10948c50b18fae7f256433afdef09e432410480" },
|
||||
"SchemaStore.nvim": { "branch": "main", "commit": "7e3f6dd6ef6da93f74974521c81d8d5bff0443c5" },
|
||||
"blink.cmp": { "branch": "main", "commit": "78336bc89ee5365633bcf754d93df01678b5c08f" },
|
||||
"bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" },
|
||||
"catppuccin": { "branch": "main", "commit": "edefef779ab08ce1a4a404713e3012b0d202bd35" },
|
||||
"conform.nvim": { "branch": "master", "commit": "016802de402556da54c36bd7359b441266b01cdd" },
|
||||
"crates.nvim": { "branch": "main", "commit": "694357861ec9ebf12475ddcdd04ea45a0923c32d" },
|
||||
"flash.nvim": { "branch": "main", "commit": "b6346946d10d07998efee029fb0f7a593806d0cd" },
|
||||
"friendly-snippets": { "branch": "main", "commit": "6cd7280adead7f586db6fccbd15d2cac7e2188b9" },
|
||||
"gitsigns.nvim": { "branch": "main", "commit": "5be654f2232c10ddcad19c1607a67b6b4b78fc29" },
|
||||
"grug-far.nvim": { "branch": "main", "commit": "11595bf747edc270bce2069d1020502ad4ae56cf" },
|
||||
"lazy.nvim": { "branch": "main", "commit": "85c7ff3711b730b4030d03144f6db6375044ae82" },
|
||||
"lazydev.nvim": { "branch": "main", "commit": "ff2cbcba459b637ec3fd165a2be59b7bbaeedf0d" },
|
||||
"lualine.nvim": { "branch": "master", "commit": "221ce6b2d999187044529f49da6554a92f740a96" },
|
||||
"mason-lspconfig.nvim": { "branch": "main", "commit": "67029ccdac1ef8941e13b826417bc0ffac24cc86" },
|
||||
"mason.nvim": { "branch": "main", "commit": "2a6940af80375532e5e9e7c1f2fc6319a1b7a69d" },
|
||||
"mini.ai": { "branch": "main", "commit": "25248c6aa002391936a6200f12d1466015987133" },
|
||||
"mini.icons": { "branch": "main", "commit": "98faae31e9be1cc054ae63485e58ceb185efcad0" },
|
||||
"mini.pairs": { "branch": "main", "commit": "b1c5a726921b7a8c9321e9a7a208aa0571de5810" },
|
||||
"noice.nvim": { "branch": "main", "commit": "7bfd942445fb63089b59f97ca487d605e715f155" },
|
||||
"nui.nvim": { "branch": "main", "commit": "a25dd472316d806eb38a5dd667c2e40da5570c75" },
|
||||
"nvim-lint": { "branch": "master", "commit": "9b99aad869102ac01775187abd8d49017b148612" },
|
||||
"nvim-lspconfig": { "branch": "master", "commit": "51dbf5359da86721662c87ca10eb73add973737b" },
|
||||
"nvim-treesitter": { "branch": "main", "commit": "074aa4422bf029908338e855d0c0f71470a971bb" },
|
||||
"nvim-treesitter-textobjects": { "branch": "main", "commit": "898ee307df58f854d11cd7edd06472574d48014e" },
|
||||
"nvim-ts-autotag": { "branch": "main", "commit": "88c1453db4ba7dd24131086fe51fdf74e587d275" },
|
||||
"persistence.nvim": { "branch": "main", "commit": "b20b2a7887bd39c1a356980b45e03250f3dce49c" },
|
||||
"plenary.nvim": { "branch": "master", "commit": "74b06c6c75e4eeb3108ec01852001636d85a932b" },
|
||||
"rustaceanvim": { "branch": "main", "commit": "f659765f93e207b8c44ee4a90eb88bd6e93bf05f" },
|
||||
"snacks.nvim": { "branch": "main", "commit": "882c996cf28183f4d63640de0b4c02ec886d01f2" },
|
||||
"telescope.nvim": { "branch": "master", "commit": "427b576c16792edad01a92b89721d923c19ad60f" },
|
||||
"todo-comments.nvim": { "branch": "main", "commit": "31e3c38ce9b29781e4422fc0322eb0a21f4e8668" },
|
||||
"tokyonight.nvim": { "branch": "main", "commit": "cdc07ac78467a233fd62c493de29a17e0cf2b2b6" },
|
||||
"trouble.nvim": { "branch": "main", "commit": "bd67efe408d4816e25e8491cc5ad4088e708a69a" },
|
||||
"ts-comments.nvim": { "branch": "main", "commit": "a59d6092213447450191122c9346f309161504cb" },
|
||||
"venv-selector.nvim": { "branch": "main", "commit": "cc4bb3975de8835291f9bb45889e96c6b2795fc4" },
|
||||
"which-key.nvim": { "branch": "main", "commit": "3aab2147e74890957785941f0c1ad87d0a44c15a" }
|
||||
}
|
||||
@@ -72,7 +72,11 @@ in
|
||||
];
|
||||
};
|
||||
|
||||
# Symlink LazyVim configuration to ~/.config/nvim recursively
|
||||
# Symlink LazyVim configuration to ~/.config/nvim recursively. This includes
|
||||
# lazy-lock.json, which pins every plugin to a specific commit for
|
||||
# reproducible builds. To update plugins, run `:Lazy update` in a writable
|
||||
# copy and commit the resulting lazy-lock.json back to this repo, since the
|
||||
# linked file is read-only.
|
||||
xdg.configFile."nvim" = {
|
||||
source = ./config;
|
||||
recursive = true;
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
{ inputs, config, ... }:
|
||||
{ inputs, my, ... }:
|
||||
{
|
||||
imports = [ inputs.pi.homeModules.default ];
|
||||
programs.pi.coding-agent = {
|
||||
enable = true;
|
||||
};
|
||||
programs.pi.coding-agent.enable = my.pi.enable;
|
||||
}
|
||||
|
||||
@@ -1,16 +1,55 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
pkgs,
|
||||
lib,
|
||||
theme,
|
||||
...
|
||||
}:
|
||||
|
||||
let
|
||||
# Rofi script-mode indexer: exposes every executable user script
|
||||
# (shell, python, whatever) so the launcher finds "everything".
|
||||
rofiScripts = pkgs.writeShellScriptBin "rofi-scripts" (builtins.readFile ./rofi/rofi-scripts.sh);
|
||||
|
||||
# Inject the shared palette into the rasi theme (see home/theme.nix).
|
||||
# `/. +` turns the generated derivation into a path, which the rofi module
|
||||
# treats as a theme file to link into its data directory.
|
||||
rofiThemeText = pkgs.writeText "volt.rasi" (
|
||||
lib.replaceStrings
|
||||
[
|
||||
"@bg0@"
|
||||
"@bg1@"
|
||||
"@fg0@"
|
||||
"@fg1@"
|
||||
"@fg2@"
|
||||
"@volt@"
|
||||
"@voltDim@"
|
||||
"@coral@"
|
||||
"@border0@"
|
||||
]
|
||||
[
|
||||
"${theme.colors.bgSecondary}f2"
|
||||
"${theme.colors.glassBg}f2"
|
||||
theme.colors.textSecondary
|
||||
theme.colors.textPrimary
|
||||
theme.colors.textMuted
|
||||
theme.colors.accentVolt
|
||||
"${theme.colors.accentVolt}1a"
|
||||
theme.colors.accentCoral
|
||||
"${theme.colors.textPrimary}14"
|
||||
]
|
||||
(builtins.readFile ./rofi/volt.rasi)
|
||||
);
|
||||
in
|
||||
{
|
||||
# Install the generated theme under the rofi theme search path and select
|
||||
# it by name (passing a derivation directly is treated as a rasi attrset).
|
||||
xdg.dataFile."rofi/themes/volt.rasi".source = rofiThemeText;
|
||||
|
||||
programs.rofi = {
|
||||
enable = true;
|
||||
terminal = "${pkgs.foot}/bin/foot";
|
||||
cycle = true;
|
||||
theme = ./rofi/volt.rasi;
|
||||
theme = "volt";
|
||||
|
||||
extraConfig = {
|
||||
# Combi mode searches .desktop apps (drun), binaries (run),
|
||||
|
||||
@@ -2,15 +2,15 @@
|
||||
// Flat brutalist-glass: dark glass surfaces, volt-lime selection, 0 radius.
|
||||
|
||||
* {
|
||||
bg0: rgba( 14, 14, 14, 95 % );
|
||||
bg1: rgba( 28, 27, 27, 95 % );
|
||||
fg0: #e5e2e1;
|
||||
fg1: #ffffff;
|
||||
fg2: #adaaaa;
|
||||
volt: #CFFC00;
|
||||
volt-dim: rgba( 207, 252, 0, 10 % );
|
||||
coral: #FF7A59;
|
||||
border0: rgba( 255, 255, 255, 8 % );
|
||||
bg0: @bg0@;
|
||||
bg1: @bg1@;
|
||||
fg0: @fg0@;
|
||||
fg1: @fg1@;
|
||||
fg2: @fg2@;
|
||||
volt: @volt@;
|
||||
volt-dim: @voltDim@;
|
||||
coral: @coral@;
|
||||
border0: @border0@;
|
||||
|
||||
background-color: transparent;
|
||||
text-color: @fg0;
|
||||
|
||||
@@ -48,9 +48,9 @@ if command -v fzf &>/dev/null; then
|
||||
--layout=reverse \
|
||||
--border=rounded \
|
||||
--prompt=" Herdr Session > " \
|
||||
--color=fg:#e5e2e1,bg:#131313,hl:#CFFC00,fg+:#ffffff,bg+:#1c1b1b,hl+:#e3ff66 \
|
||||
--color=info:#ADAAAA,prompt:#CFFC00,pointer:#FF7A59,marker:#CFFC00,spinner:#00BFFF \
|
||||
--color=border:#2a2929,gutter:#131313 \
|
||||
--color=fg:@fg@,bg:@bg@,hl:@volt@,fg+:@fgBright@,bg+:@glass@,hl+:@voltLight@ \
|
||||
--color=info:@muted@,prompt:@volt@,pointer:@coral@,marker:@volt@,spinner:@blue@ \
|
||||
--color=border:@surface@,gutter:@bg@ \
|
||||
--header="Select Herdr session to attach / create | Esc for plain shell" \
|
||||
--header-first)
|
||||
else
|
||||
|
||||
@@ -6,22 +6,22 @@ format = "$os$directory$git_branch$git_status$nix_shell$rust$c$python$cmd_durati
|
||||
|
||||
[os]
|
||||
disabled = false
|
||||
style = "bold #e5e2e1"
|
||||
style = "bold @text@"
|
||||
symbols = { NixOS = " " }
|
||||
|
||||
[directory]
|
||||
truncation_length = 3
|
||||
truncate_to_repo = true
|
||||
style = "bold #CFFC00"
|
||||
style = "bold @volt@"
|
||||
format = "[ $path]($style) "
|
||||
|
||||
[git_branch]
|
||||
symbol = " "
|
||||
style = "bold #00BFFF"
|
||||
style = "bold @blue@"
|
||||
format = "on [$symbol$branch]($style) "
|
||||
|
||||
[git_status]
|
||||
style = "bold #FF7A59"
|
||||
style = "bold @coral@"
|
||||
format = "([$all_status$ahead_behind]($style) )"
|
||||
conflicted = " "
|
||||
ahead = " "
|
||||
@@ -30,35 +30,35 @@ diverged = " "
|
||||
untracked = " "
|
||||
stashed = " "
|
||||
modified = " "
|
||||
staged = " [](bold #CFFC00)"
|
||||
staged = " [](bold @volt@)"
|
||||
renamed = " "
|
||||
deleted = " "
|
||||
|
||||
[nix_shell]
|
||||
symbol = " "
|
||||
style = "bold #e3ff66"
|
||||
style = "bold @voltLight@"
|
||||
format = "via [$symbol$state]($style) "
|
||||
|
||||
[rust]
|
||||
symbol = " "
|
||||
style = "bold #e3ff66"
|
||||
style = "bold @voltLight@"
|
||||
format = "[$symbol($version )]($style)"
|
||||
|
||||
[c]
|
||||
symbol = " "
|
||||
style = "bold #00BFFF"
|
||||
style = "bold @blue@"
|
||||
format = "[$symbol($version )]($style)"
|
||||
|
||||
[python]
|
||||
symbol = " "
|
||||
style = "bold #CFFC00"
|
||||
style = "bold @volt@"
|
||||
format = "[$symbol($version )]($style)"
|
||||
|
||||
[cmd_duration]
|
||||
min_time = 2000
|
||||
style = "bold #FF7A59"
|
||||
style = "bold @coral@"
|
||||
format = "[ $duration]($style) "
|
||||
|
||||
[character]
|
||||
success_symbol = "[❯ ](bold #CFFC00) "
|
||||
error_symbol = "[❯ ](bold #FF7A59) "
|
||||
success_symbol = "[❯ ](bold @volt@) "
|
||||
error_symbol = "[❯ ](bold @coral@) "
|
||||
|
||||
36
home/theme.nix
Normal file
36
home/theme.nix
Normal file
@@ -0,0 +1,36 @@
|
||||
# Silicon Volt palette. Single source of truth for the shared home-manager
|
||||
# configuration. This is a plain attrset expression, not a home-manager module:
|
||||
# it is passed to every home module through `extraSpecialArgs`.
|
||||
#
|
||||
# theme.colors.<name> -> "#rrggbb" (most tools)
|
||||
# theme.bare.<name> -> "rrggbb" (foot and other bare-hex tools)
|
||||
let
|
||||
colors = {
|
||||
bgPrimary = "#131313";
|
||||
bgSecondary = "#0e0e0e";
|
||||
glassBg = "#1c1b1b";
|
||||
surfaceVariant = "#2a2929";
|
||||
textPrimary = "#ffffff";
|
||||
textSecondary = "#e5e2e1";
|
||||
textMuted = "#adaaaa";
|
||||
accentVolt = "#cffc00";
|
||||
accentVoltLight = "#e3ff66";
|
||||
accentCoral = "#ff7a59";
|
||||
accentBlue = "#00bfff";
|
||||
|
||||
# Foot-specific ANSI shades
|
||||
neutralGray = "#c6c6c7";
|
||||
lightCyan = "#66d9ff";
|
||||
brightCoral = "#ff9a82";
|
||||
brightLime = "#dfff66";
|
||||
brightVolt = "#f0ff8c";
|
||||
brightGray = "#e0e0e1";
|
||||
brightCyan = "#99e6ff";
|
||||
};
|
||||
|
||||
stripHash = c: builtins.substring 1 (builtins.stringLength c) c;
|
||||
in
|
||||
{
|
||||
inherit colors;
|
||||
bare = builtins.mapAttrs (_: stripHash) colors;
|
||||
}
|
||||
26
home/zsh.nix
26
home/zsh.nix
@@ -2,6 +2,8 @@
|
||||
config,
|
||||
pkgs,
|
||||
lib,
|
||||
theme,
|
||||
my,
|
||||
...
|
||||
}:
|
||||
|
||||
@@ -23,9 +25,9 @@
|
||||
enableZshIntegration = true;
|
||||
defaultOptions = [
|
||||
"--color=dark"
|
||||
"--color=fg:#e5e2e1,bg:-1,hl:#CFFC00,fg+:#ffffff,bg+:#1c1b1b,hl+:#e3ff66"
|
||||
"--color=info:#ADAAAA,prompt:#CFFC00,pointer:#FF7A59,marker:#CFFC00,spinner:#00BFFF,header:#00BFFF"
|
||||
"--color=border:#2a2929,bg+:-1,gutter:-1"
|
||||
"--color=fg:${theme.colors.textSecondary},bg:-1,hl:${theme.colors.accentVolt},fg+:${theme.colors.textPrimary},bg+:${theme.colors.glassBg},hl+:${theme.colors.accentVoltLight}"
|
||||
"--color=info:${theme.colors.textMuted},prompt:${theme.colors.accentVolt},pointer:${theme.colors.accentCoral},marker:${theme.colors.accentVolt},spinner:${theme.colors.accentBlue},header:${theme.colors.accentBlue}"
|
||||
"--color=border:${theme.colors.surfaceVariant},bg+:-1,gutter:-1"
|
||||
];
|
||||
};
|
||||
|
||||
@@ -41,7 +43,18 @@
|
||||
programs.starship = {
|
||||
enable = true;
|
||||
enableZshIntegration = true;
|
||||
settings = builtins.fromTOML (builtins.readFile ./starship/starship.toml);
|
||||
settings = builtins.fromTOML (
|
||||
lib.replaceStrings
|
||||
[ "@text@" "@volt@" "@blue@" "@coral@" "@voltLight@" ]
|
||||
[
|
||||
theme.colors.textSecondary
|
||||
theme.colors.accentVolt
|
||||
theme.colors.accentBlue
|
||||
theme.colors.accentCoral
|
||||
theme.colors.accentVoltLight
|
||||
]
|
||||
(builtins.readFile ./starship/starship.toml)
|
||||
);
|
||||
};
|
||||
|
||||
programs.zsh = {
|
||||
@@ -95,6 +108,7 @@
|
||||
ZSH_TMUX_FIXTERM = "true";
|
||||
GPG_TTY = "$(tty)";
|
||||
PNPM_HOME = "$HOME/.local/share/pnpm";
|
||||
FLAKE_CONFIG = my.flakeDir;
|
||||
};
|
||||
|
||||
shellAliases = {
|
||||
@@ -104,8 +118,8 @@
|
||||
l = "ls -al";
|
||||
clear = "clear -x";
|
||||
rm = "rm -I";
|
||||
zshconf = "$EDITOR $HOME/NixOS-Configs/home/zsh.nix";
|
||||
hyprconf = "$EDITOR $HOME/NixOS-Configs/home/hypr/hyprland.nix";
|
||||
zshconf = "$EDITOR ${my.flakeDir}/home/zsh.nix";
|
||||
hyprconf = "$EDITOR ${my.flakeDir}/home/hypr/hyprland.nix";
|
||||
setup = "source ./setup_env.sh";
|
||||
gpuenv = "__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia";
|
||||
digital = "$HOME/Tools/Digital/Digital.sh";
|
||||
|
||||
@@ -18,7 +18,7 @@ fi
|
||||
|
||||
# Auto-tmux configuration
|
||||
use_auto_tmux () {
|
||||
! ([ -z "$DISPLAY" ] && [ -z "$WAYLAND_DISPLAY" ] || $(pgrep -x "i3" > /dev/null || pgrep -x "sway" > /dev/null || pgrep -x "Hyprland" > /dev/null))
|
||||
! ([ -z "$DISPLAY" ] && [ -z "$WAYLAND_DISPLAY" ] || pgrep -x i3 >/dev/null || pgrep -x sway >/dev/null || pgrep -x Hyprland >/dev/null)
|
||||
}
|
||||
|
||||
if use_auto_tmux; then
|
||||
|
||||
@@ -20,12 +20,13 @@
|
||||
my = {
|
||||
gaming.enable = true;
|
||||
ai.local.enable = true;
|
||||
pi.enable = true;
|
||||
};
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Host display configuration (absorbed by home/hypr/hyprland.nix)
|
||||
# ---------------------------------------------------------------------------
|
||||
home-manager.users.${config.my.username}.volt.monitors = [
|
||||
home-manager.users.${config.my.username}.hypr.monitors = [
|
||||
{
|
||||
# Samsung Odyssey Ark - matched by description so it survives port changes
|
||||
output = "desc:Samsung Electric Company Odyssey Ark H1AK500000";
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
@@ -13,8 +14,16 @@
|
||||
description = "Primary interactive user account.";
|
||||
};
|
||||
|
||||
flakeDir = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "/home/${config.my.username}/NixOS-Configs";
|
||||
description = "Checkout location of this flake on the machine.";
|
||||
};
|
||||
|
||||
gaming.enable = lib.mkEnableOption "Steam, Gamemode and gaming tooling";
|
||||
|
||||
ai.local.enable = lib.mkEnableOption "local AI services (Ollama, ComfyUI, Open WebUI)";
|
||||
|
||||
pi.enable = lib.mkEnableOption "the pi coding agent (home-manager)";
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user