Add fixes for waybar, update AGENTS, various tweaks, remove helix defn from programs, use shared helix.nix
This commit is contained in:
parent
d4e3f950d7
commit
d1bb9658ce
57
AGENTS.md
57
AGENTS.md
@ -1,34 +1,51 @@
|
||||
# AGENTS.md - NixOS Configuration Repository
|
||||
# AGENTS.md - NixOS Flake Configuration
|
||||
|
||||
## Build/Test Commands
|
||||
```bash
|
||||
# Validate configuration syntax
|
||||
nix flake check
|
||||
## Before Starting Work
|
||||
|
||||
# Dry-run build for specific host (test without building)
|
||||
nix build .#nixosConfigurations.<hostname>.config.system.build.toplevel --dry-run
|
||||
Run `hostname` to identify current machine. Hostname = flake config name (e.g., `frame12` → `.#frame12`).
|
||||
|
||||
# Test configuration without switching
|
||||
sudo nixos-rebuild test --flake .
|
||||
## Repository Structure
|
||||
|
||||
# Apply configuration changes
|
||||
sudo nixos-rebuild switch --flake .#<hostname>
|
||||
```
|
||||
flake.nix # Defines all nixosConfigurations
|
||||
<hostname>/ # Per-host configs (frame12, nate, jaci, scrappy, nate-work, luci)
|
||||
default.nix # Host entry point, sets deskCfg or serverConfig
|
||||
desktop-configuration.nix # Desktop systems only
|
||||
modules/ # Host-specific modules (niri, home-manager, user)
|
||||
nixos/hardware-configuration.nix # Auto-generated, do not edit
|
||||
shared/ # Reusable modules imported by hosts
|
||||
modules/ # apps/, home-manager/, services/, system/, user/
|
||||
server-configuration.nix # Server base (luci uses this)
|
||||
```
|
||||
|
||||
## Code Style Guidelines
|
||||
**Host types:**
|
||||
- **Desktop** (frame12, nate, jaci, nate-work, scrappy): Use `deskCfg` options, Home Manager, Stylix theming
|
||||
- **Server** (luci): Uses `serverConfig` options, minimal packages
|
||||
|
||||
**Language**: Nix expression language
|
||||
## Build/Test Commands
|
||||
|
||||
**Formatting**: Use 2-4 space indentation (varies by file), no tabs except in some user modules
|
||||
```bash
|
||||
nix flake check # Validate syntax
|
||||
nix build .#nixosConfigurations.<hostname>.config.system.build.toplevel --dry-run
|
||||
# Must be done by user, agent lacks admin privileges.
|
||||
sudo nixos-rebuild test --flake .#<hostname> # Test without switching
|
||||
sudo nixos-rebuild switch --flake .#<hostname> # Apply changes
|
||||
```
|
||||
|
||||
**Imports**: Always import required modules at top: `{ config, lib, pkgs, ... }:` or with additional args like `inputs, outputs, system, timeZone`
|
||||
## Key Patterns
|
||||
|
||||
**Naming**: Use camelCase for options (`userName`, `hostName`, `isDesktopUser`), kebab-case for hostnames, underscores for module names (`main_user`)
|
||||
**Configuration options:** Desktops set `deskCfg = { userName, hostName, de }`, servers set `serverConfig = { userName, hostName, hostId, ... }`
|
||||
|
||||
**Module Pattern**: Define options with `lib.mkOption`, use `lib.mkIf` for conditional config, use `lib.mkMerge` for combining attribute sets
|
||||
**Module structure:** Options in `options.<name>`, config in `config = lib.mkIf cfg.enable { ... }`
|
||||
|
||||
**Error Handling**: Rely on Nix's built-in evaluation errors; use `lib.mkEnableOption` for optional features
|
||||
**Home Manager:** User config in `<host>/modules/home-manager/home.nix`, packages in `home.packages`
|
||||
|
||||
**Types**: Specify types in options: `lib.types.str`, `lib.types.bool`, provide defaults and descriptions for all options
|
||||
**Shared imports:** `../shared/modules/<path>` for reusable modules
|
||||
|
||||
**Comments**: Minimal comments; prefer self-documenting option descriptions; hardware files auto-generated with warnings at top
|
||||
## Code Style
|
||||
|
||||
- Nix expression language, 2-4 space indent
|
||||
- camelCase options (`userName`), kebab-case hostnames, underscores for modules (`main_user`)
|
||||
- `lib.mkOption` with types (`lib.types.str`, `lib.types.bool`), `lib.mkEnableOption` for toggles
|
||||
- `lib.mkIf` for conditionals, `lib.mkMerge` for combining sets
|
||||
- Minimal comments; use self-documenting option descriptions
|
||||
|
||||
@ -61,6 +61,14 @@
|
||||
};
|
||||
};
|
||||
|
||||
# Icon theme for tray applets (nm-applet, etc.)
|
||||
iconTheme = {
|
||||
enable = true;
|
||||
package = pkgs.papirus-icon-theme;
|
||||
light = "Papirus-Light";
|
||||
dark = "Papirus-Dark";
|
||||
};
|
||||
|
||||
# Keep custom Framework plymouth theme
|
||||
targets.plymouth.enable = false;
|
||||
};
|
||||
|
||||
@ -8,6 +8,7 @@
|
||||
{
|
||||
imports = [
|
||||
../../../shared/modules/apps/firefox/firefox.nix
|
||||
../../../shared/modules/apps/helix.nix
|
||||
../../../shared/modules/home-manager/git-autosync.nix
|
||||
../niri/niri_home.nix
|
||||
./programs.nix
|
||||
@ -19,6 +20,7 @@
|
||||
home.stateVersion = "25.05"; # Please read the comment before changing.
|
||||
|
||||
firefoxApp.enable = true;
|
||||
helixApp.enable = true;
|
||||
fonts.fontconfig.enable = true;
|
||||
|
||||
# Stylix auto-theming - applies to all programs.<name>.enable apps
|
||||
|
||||
@ -40,362 +40,6 @@
|
||||
};
|
||||
};
|
||||
|
||||
#
|
||||
# Editor
|
||||
#
|
||||
helix = {
|
||||
enable = true;
|
||||
# Stylix sets the theme, but we override syntax tokens for minimal highlighting
|
||||
# Philosophy: Only keywords, strings, comments, numbers get color - rest is plain text
|
||||
themes.stylix = {
|
||||
# Inherit Stylix's base theme (UI, palette, etc.)
|
||||
inherits = "stylix";
|
||||
|
||||
# Minimal syntax highlighting - only 4 categories get color
|
||||
# Comments - stand out
|
||||
"comment" = { fg = "yellow"; modifiers = ["italic"]; };
|
||||
|
||||
# Keywords - highlighted and italic
|
||||
"keyword" = { fg = "magenta"; modifiers = ["italic"]; };
|
||||
"keyword.control" = { fg = "magenta"; modifiers = ["italic"]; };
|
||||
"keyword.directive" = { fg = "magenta"; modifiers = ["italic"]; };
|
||||
"keyword.function" = { fg = "magenta"; modifiers = ["italic"]; };
|
||||
"keyword.operator" = { fg = "magenta"; modifiers = ["italic"]; };
|
||||
"keyword.return" = { fg = "magenta"; modifiers = ["italic"]; };
|
||||
"keyword.storage" = { fg = "magenta"; modifiers = ["italic"]; };
|
||||
|
||||
# Strings - highlighted
|
||||
"string" = "green";
|
||||
"string.regexp" = "red";
|
||||
"string.special" = "green";
|
||||
|
||||
# Numbers/constants - highlighted
|
||||
"constant.numeric" = "red";
|
||||
"constant.builtin" = "red";
|
||||
"constant.character.escape" = "red";
|
||||
|
||||
# Functions remain plain text
|
||||
"function" = "text";
|
||||
"function.builtin" = "text";
|
||||
"function.method" = "text";
|
||||
"function.macro" = "text";
|
||||
|
||||
# Variables remain plain text
|
||||
"variable" = "text";
|
||||
"variable.builtin" = "text";
|
||||
"variable.parameter" = "text";
|
||||
"variable.other.member" = "text";
|
||||
|
||||
# Types get subtle highlight
|
||||
"type" = { fg = "cyan"; modifiers = ["italic"]; };
|
||||
"type.builtin" = "cyan";
|
||||
|
||||
# Top-level definitions get accent
|
||||
"function.definition" = { fg = "text"; modifiers = ["bold"]; };
|
||||
"type.definition" = { fg = "text"; modifiers = ["bold"]; };
|
||||
|
||||
# Everything else plain
|
||||
"constructor" = "text";
|
||||
"attribute" = "text";
|
||||
"label" = "text";
|
||||
"namespace" = "text";
|
||||
"tag" = "text";
|
||||
|
||||
# Punctuation slightly dimmed
|
||||
"punctuation" = { fg = "text"; modifiers = ["dim"]; };
|
||||
"punctuation.bracket" = { fg = "text"; modifiers = ["dim"]; };
|
||||
"punctuation.delimiter" = { fg = "text"; modifiers = ["dim"]; };
|
||||
"punctuation.special" = { fg = "text"; modifiers = ["dim"]; };
|
||||
"operator" = { fg = "text"; modifiers = ["dim"]; };
|
||||
|
||||
# Markup
|
||||
"markup.heading" = { fg = "cyan"; modifiers = ["bold"]; };
|
||||
"markup.list" = "magenta";
|
||||
"markup.bold" = { modifiers = ["bold"]; };
|
||||
"markup.italic" = { modifiers = ["italic"]; };
|
||||
"markup.strikethrough" = { modifiers = ["crossed_out"]; };
|
||||
"markup.link.url" = { fg = "blue"; modifiers = ["underlined"]; };
|
||||
"markup.link.text" = "magenta";
|
||||
"markup.quote" = "green";
|
||||
"markup.raw" = "green";
|
||||
};
|
||||
|
||||
settings = {
|
||||
|
||||
keys.normal = {
|
||||
# Navigation (Colemak-DH)
|
||||
n = "move_char_left";
|
||||
i = "move_visual_line_down";
|
||||
e = "move_visual_line_up";
|
||||
o = "move_char_right";
|
||||
"S-tab" = "jump_backward";
|
||||
I = [ "page_cursor_half_down" "align_view_center" ];
|
||||
E = [ "page_cursor_half_up" "align_view_center" ];
|
||||
|
||||
# Modes
|
||||
h = "insert_mode";
|
||||
H = "insert_at_line_start";
|
||||
l = "open_below";
|
||||
L = "open_above";
|
||||
|
||||
# Search
|
||||
k = "search_next";
|
||||
K = "search_prev";
|
||||
|
||||
# Selection
|
||||
C-s = "split_selection_on_newline";
|
||||
C-minus = "merge_selections";
|
||||
C-_ = "merge_consecutive_selections";
|
||||
"C-;" = "flip_selections";
|
||||
"C-:" = "ensure_selections_forward";
|
||||
"C-," = "remove_primary_selection";
|
||||
C-c = "change_selection_noyank";
|
||||
C-d = "delete_selection_noyank";
|
||||
"C-(" = "rotate_selection_contents_backward";
|
||||
"C-)" = "rotate_selection_contents_forward";
|
||||
C-x = "shrink_to_line_bounds";
|
||||
C-J = "join_selections_space";
|
||||
C-K = "remove_selections";
|
||||
C-o = "expand_selection";
|
||||
C-i = "shrink_selection";
|
||||
C-p = "select_prev_sibling";
|
||||
C-n = "select_next_sibling";
|
||||
|
||||
# Misc
|
||||
"C-/" = "toggle_comments";
|
||||
"@" = ":append-output git config get user.email";
|
||||
|
||||
space = {
|
||||
B = ":sh git log -n 5 --format='format:%%h (%%an: %%ar) %%s' --no-patch -L%{cursor_line},+1:%{buffer_name}";
|
||||
x = ":write-buffer-close";
|
||||
X = ":write-quit-all";
|
||||
o = ":config-open";
|
||||
h = "hover";
|
||||
k = "select_references_to_symbol_under_cursor";
|
||||
};
|
||||
|
||||
g = {
|
||||
"/" = "goto_next_buffer";
|
||||
h = "goto_previous_buffer";
|
||||
n = [ "collapse_selection" "extend_to_line_start" ];
|
||||
o = [ "collapse_selection" "extend_to_line_end" ];
|
||||
e = "move_line_up";
|
||||
i = "move_line_down";
|
||||
l = "goto_last_line";
|
||||
p = "no_op";
|
||||
k = "no_op";
|
||||
j = "no_op";
|
||||
};
|
||||
|
||||
m.m = [ "select_mode" "match_brackets" "normal_mode" ];
|
||||
|
||||
"C-w" = {
|
||||
h = "hsplit";
|
||||
C-h = "hsplit";
|
||||
n = "jump_view_left";
|
||||
C-n = "jump_view_left";
|
||||
i = "jump_view_down";
|
||||
I = "swap_view_down";
|
||||
C-i = "jump_view_down";
|
||||
e = "jump_view_up";
|
||||
E = "swap_view_up";
|
||||
C-e = "jump_view_up";
|
||||
o = "jump_view_right";
|
||||
O = "swap_view_right";
|
||||
C-o = "jump_view_right";
|
||||
# Remove old
|
||||
s = "no_op";
|
||||
C-s = "no_op";
|
||||
H = "no_op";
|
||||
j = "no_op";
|
||||
J = "no_op";
|
||||
C-j = "no_op";
|
||||
k = "no_op";
|
||||
K = "no_op";
|
||||
C-k = "no_op";
|
||||
l = "no_op";
|
||||
L = "no_op";
|
||||
C-l = "no_op";
|
||||
};
|
||||
};
|
||||
|
||||
keys.select = {
|
||||
n = "extend_char_left";
|
||||
i = "extend_line_down";
|
||||
e = "extend_line_up";
|
||||
o = "extend_char_right";
|
||||
I = [ "page_cursor_half_down" "align_view_center" ];
|
||||
E = [ "page_cursor_half_up" "align_view_center" ];
|
||||
|
||||
g = {
|
||||
"/" = "goto_next_buffer";
|
||||
h = "goto_previous_buffer";
|
||||
n = "goto_line_start";
|
||||
o = "goto_line_end";
|
||||
e = "move_line_up";
|
||||
i = "move_line_down";
|
||||
l = "goto_last_line";
|
||||
p = "no_op";
|
||||
k = "no_op";
|
||||
j = "no_op";
|
||||
};
|
||||
};
|
||||
|
||||
editor = {
|
||||
auto-format = true;
|
||||
auto-save = true;
|
||||
bufferline = "always";
|
||||
color-modes = true;
|
||||
completion-timeout = 5;
|
||||
cursorcolumn = true;
|
||||
cursorline = true;
|
||||
indent-heuristic = "tree-sitter";
|
||||
line-number = "relative";
|
||||
rulers = [ 120 ];
|
||||
text-width = 120;
|
||||
end-of-line-diagnostics = "hint";
|
||||
|
||||
cursor-shape = {
|
||||
insert = "bar";
|
||||
normal = "block";
|
||||
select = "underline";
|
||||
};
|
||||
|
||||
file-picker.hidden = false;
|
||||
|
||||
indent-guides.render = true;
|
||||
|
||||
inline-diagnostics = {
|
||||
cursor-line = "warning";
|
||||
other-lines = "disable";
|
||||
prefix-len = 5;
|
||||
max-diagnostics = 1;
|
||||
max-wrap = 30;
|
||||
};
|
||||
|
||||
lsp = {
|
||||
display-messages = true;
|
||||
display-inlay-hints = true;
|
||||
};
|
||||
|
||||
soft-wrap = {
|
||||
enable = true;
|
||||
max-wrap = 30;
|
||||
};
|
||||
|
||||
statusline = {
|
||||
left = [ "mode" "file-modification-indicator" "spinner" "version-control" ];
|
||||
center = [ "file-name" ];
|
||||
right = [ "diagnostics" "selections" "register" "position" "file-encoding" ];
|
||||
mode.normal = "Normal";
|
||||
mode.insert = "Insert";
|
||||
mode.select = "Select";
|
||||
};
|
||||
|
||||
whitespace.render = {
|
||||
space = "all";
|
||||
tab = "all";
|
||||
tabpad = "all";
|
||||
newline = "none";
|
||||
nbsp = "none";
|
||||
};
|
||||
|
||||
whitespace.characters = {
|
||||
space = " ";
|
||||
tab = "⇀";
|
||||
tabpad = " ";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
languages = {
|
||||
language = [
|
||||
{
|
||||
name = "go";
|
||||
debugger = {
|
||||
name = "go";
|
||||
transport = "tcp";
|
||||
command = "dlv";
|
||||
args = [ "connect" ];
|
||||
port-arg = "127.0.0.1:2345";
|
||||
templates = [{
|
||||
name = "connect";
|
||||
request = "launch";
|
||||
completion = [];
|
||||
args = {};
|
||||
}];
|
||||
};
|
||||
}
|
||||
{
|
||||
name = "markdown";
|
||||
language-servers = [ "marksman" ];
|
||||
}
|
||||
{
|
||||
name = "dart";
|
||||
formatter = { command = "dart"; args = [ "format" "-l" "120" ]; };
|
||||
language-servers = [ "dart" ];
|
||||
}
|
||||
{
|
||||
name = "nix";
|
||||
language-servers = [ "nil" ];
|
||||
}
|
||||
{
|
||||
name = "zig";
|
||||
language-servers = [ "zls" ];
|
||||
debugger = {
|
||||
name = "codelldb-dap";
|
||||
transport = "tcp";
|
||||
command = "codelldb";
|
||||
args = [];
|
||||
port-arg = "--port {}";
|
||||
templates = [
|
||||
{
|
||||
name = "launch";
|
||||
request = "launch";
|
||||
completion = [{ name = "binary"; completion = "filename"; }];
|
||||
args = { console = "internalConsole"; program = "{0}"; };
|
||||
}
|
||||
{
|
||||
name = "attach";
|
||||
request = "attach";
|
||||
completion = [ "pid" ];
|
||||
args = { console = "internalConsole"; pid = "{0}"; };
|
||||
}
|
||||
{
|
||||
name = "gdbserver attach";
|
||||
request = "attach";
|
||||
completion = [
|
||||
{ name = "lldb connect url"; default = "connect://localhost:3333"; }
|
||||
{ name = "file"; completion = "filename"; }
|
||||
"pid"
|
||||
];
|
||||
args = {
|
||||
console = "internalConsole";
|
||||
attachCommands = [
|
||||
"platform select remote-gdb-server"
|
||||
"platform connect {0}"
|
||||
"file {1}"
|
||||
"attach {2}"
|
||||
];
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
{
|
||||
name = "cyano";
|
||||
scope = "source.cyo";
|
||||
file-types = [ "cyo" ];
|
||||
language-servers = [ "ltex-ls" ];
|
||||
}
|
||||
];
|
||||
|
||||
language-server.ltex-ls = {
|
||||
command = "ltex-ls";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
#
|
||||
# CLI Tools
|
||||
#
|
||||
|
||||
@ -62,6 +62,14 @@
|
||||
};
|
||||
};
|
||||
|
||||
# Icon theme for tray applets (nm-applet, etc.)
|
||||
iconTheme = {
|
||||
enable = true;
|
||||
package = pkgs.reversal-icon-theme;
|
||||
light = "Reversal";
|
||||
dark = "Reversal";
|
||||
};
|
||||
|
||||
# Disable plymouth styling (use default)
|
||||
targets.plymouth.enable = false;
|
||||
};
|
||||
|
||||
@ -1,46 +0,0 @@
|
||||
[main]
|
||||
font=Hurmit Nerd Font Mono:size=12
|
||||
notify=yes
|
||||
|
||||
selection-target=clipboard
|
||||
|
||||
[colors]
|
||||
# Catpuccin Machiatto theme
|
||||
foreground=cad3f5 # Text
|
||||
background=24273a # Base
|
||||
regular0=494d64 # Surface 1
|
||||
regular1=ed8796 # red
|
||||
regular2=a6da95 # green
|
||||
regular3=eed49f # yellow
|
||||
regular4=8aadf4 # blue
|
||||
regular5=f5bde6 # pink
|
||||
regular6=8bd5ca # teal
|
||||
regular7=b8c0e0 # Subtext 1
|
||||
bright0=5b6078 # Surface 2
|
||||
bright1=ed8796 # red
|
||||
bright2=a6da95 # green
|
||||
bright3=eed49f # yellow
|
||||
bright4=8aadf4 # blue
|
||||
bright5=f5bde6 # pink
|
||||
bright6=8bd5ca # teal
|
||||
bright7=a5adcb # Subtext 0foreground=cdd6f4 # Text
|
||||
|
||||
# [colors]
|
||||
# Catpuccin Mocha theme colors
|
||||
# background=1e1e2e # Base
|
||||
# regular0=45475a # Surface 1
|
||||
# regular1=f38ba8 # red
|
||||
# regular2=a6e3a1 # green
|
||||
# regular3=f9e2af # yellow
|
||||
# regular4=89b4fa # blue
|
||||
# regular5=f5c2e7 # pink
|
||||
# regular6=94e2d5 # teal
|
||||
# regular7=bac2de # Subtext 1
|
||||
# bright0=585b70 # Surface 2
|
||||
# bright1=f38ba8 # red
|
||||
# bright2=a6e3a1 # green
|
||||
# bright3=f9e2af # yellow
|
||||
# bright4=89b4fa # blue
|
||||
# bright5=f5c2e7 # pink
|
||||
# bright6=94e2d5 # teal
|
||||
# bright7=a6adc8 # Subtext 0
|
||||
@ -1,169 +0,0 @@
|
||||
# Theme
|
||||
theme = "catppuccin_macchiato"
|
||||
|
||||
[keys.normal]
|
||||
|
||||
# Navigation
|
||||
n = "move_char_left" # Maps the 'a' key to the move_char_left command
|
||||
i = "move_visual_line_down"
|
||||
e = "move_visual_line_up"
|
||||
o = "move_char_right"
|
||||
|
||||
I = "page_down"
|
||||
E = "page_up"
|
||||
|
||||
# Modes
|
||||
h = "insert_mode"
|
||||
H = "insert_at_line_start"
|
||||
l = "open_below"
|
||||
L = "open_above"
|
||||
|
||||
# Search
|
||||
k = "search_next"
|
||||
K = "search_prev"
|
||||
|
||||
# Selection
|
||||
C-s = "split_selection_on_newline"
|
||||
C-minus = "merge_selections"
|
||||
C-_ = "merge_consecutive_selections"
|
||||
"C-;" = "flip_selections"
|
||||
"C-:" = "ensure_selections_forward"
|
||||
"C-," = "remove_primary_selection"
|
||||
C-c = "change_selection_noyank"
|
||||
C-d = "delete_selection_noyank"
|
||||
"C-(" = "rotate_selection_contents_backward"
|
||||
"C-)" = "rotate_selection_contents_forward"
|
||||
C-x = "shrink_to_line_bounds"
|
||||
C-J = "join_selections_space"
|
||||
C-K = "remove_selections"
|
||||
C-o = "expand_selection"
|
||||
C-i = "shrink_selection"
|
||||
C-p = "select_prev_sibling"
|
||||
C-n = "select_next_sibling"
|
||||
|
||||
# Misc
|
||||
"C-/" = "toggle_comments"
|
||||
|
||||
[keys.normal."C-space"]
|
||||
x = ":wbc!"
|
||||
s = ":w!" # save file
|
||||
o = ":config-open"
|
||||
|
||||
[keys.normal.g]
|
||||
"/" = "goto_next_buffer"
|
||||
h = "goto_previous_buffer"
|
||||
n = ["collapse_selection", "extend_to_line_start"]
|
||||
o = ["collapse_selection", "extend_to_line_end"]
|
||||
e = "move_line_up"
|
||||
i = "move_line_down"
|
||||
l = "goto_last_line"
|
||||
|
||||
p = "no_op"
|
||||
k = "no_op"
|
||||
j = "no_op"
|
||||
|
||||
[keys.normal.m]
|
||||
m = ["select_mode", "match_brackets", "normal_mode"]
|
||||
|
||||
[keys.select]
|
||||
n = "extend_char_left"
|
||||
i = "extend_line_down"
|
||||
e = "extend_line_up"
|
||||
o = "extend_char_right"
|
||||
|
||||
[keys.select.g]
|
||||
"/" = "goto_next_buffer"
|
||||
h = "goto_previous_buffer"
|
||||
n = "goto_line_start"
|
||||
o = "goto_line_end"
|
||||
e = "move_line_up"
|
||||
i = "move_line_down"
|
||||
l = "goto_last_line"
|
||||
|
||||
p = "no_op"
|
||||
k = "no_op"
|
||||
j = "no_op"
|
||||
|
||||
# Window mode
|
||||
[keys.normal."C-w"]
|
||||
h = "hsplit"
|
||||
C-h = "hsplit"
|
||||
n = "jump_view_left"
|
||||
C-n = "jump_view_left"
|
||||
i = "jump_view_down"
|
||||
I = "swap_view_down"
|
||||
C-i = "jump_view_down"
|
||||
e = "jump_view_up"
|
||||
E = "swap_view_up"
|
||||
C-e = "jump_view_up"
|
||||
o = "jump_view_right"
|
||||
O = "swap_view_right"
|
||||
C-o = "jump_view_right"
|
||||
|
||||
# Remove old
|
||||
s = "no_op"
|
||||
C-s = "no_op"
|
||||
H = "no_op"
|
||||
j = "no_op"
|
||||
J = "no_op"
|
||||
C-j = "no_op"
|
||||
k = "no_op"
|
||||
K = "no_op"
|
||||
C-k = "no_op"
|
||||
l = "no_op"
|
||||
L = "no_op"
|
||||
C-l = "no_op"
|
||||
|
||||
[keys.normal."space"]
|
||||
h = "hover"
|
||||
k = "select_references_to_symbol_under_cursor"
|
||||
|
||||
[editor]
|
||||
bufferline = "always"
|
||||
auto-save = true
|
||||
line-number = "relative"
|
||||
cursorline = true
|
||||
cursorcolumn = true
|
||||
color-modes = true
|
||||
text-width = 120
|
||||
auto-format = true
|
||||
|
||||
[editor.statusline]
|
||||
left = ["mode", "spinner", "version-control"]
|
||||
center = ["file-name"]
|
||||
mode.normal = "Normal"
|
||||
mode.insert = "Insert"
|
||||
mode.select = "Select"
|
||||
|
||||
[editor.indent-guides]
|
||||
render = true
|
||||
|
||||
[editor.lsp]
|
||||
display-messages = true
|
||||
display-inlay-hints = false
|
||||
|
||||
[editor.cursor-shape]
|
||||
insert = "bar"
|
||||
normal = "block"
|
||||
select = "underline"
|
||||
|
||||
[editor.file-picker]
|
||||
hidden = false
|
||||
|
||||
[editor.whitespace.render]
|
||||
space = "all"
|
||||
tab = "all"
|
||||
tabpad = "all"
|
||||
newline = "none"
|
||||
nbsp = "none"
|
||||
|
||||
[editor.whitespace.characters]
|
||||
space = "·"
|
||||
tab = "⇀"
|
||||
tabpad = " "
|
||||
|
||||
|
||||
#w = "move_line_up" # Maps the 'w' key move_line_up
|
||||
#"C-S-esc" = "extend_line" # Maps Ctrl-Shift-Escape to extend_line
|
||||
#g = { a = "code_action" } # Maps `ga` to show possible code actions
|
||||
#"ret" = ["open_below", "normal_mode"] # Maps the enter key to open_below then re-enter normal mode
|
||||
@ -1,4 +0,0 @@
|
||||
# Change dart format to 120 lines
|
||||
[[language]]
|
||||
name = "dart"
|
||||
formatter = {command = "dart", args = ["format", "-l", "120"]}
|
||||
@ -1,3 +0,0 @@
|
||||
profile {
|
||||
output DP-2 position 0,0 mode 1920x1080@165.003006Hz
|
||||
}
|
||||
@ -1,88 +0,0 @@
|
||||
{
|
||||
"modules-left": [
|
||||
"custom/launcher",
|
||||
"wlr/taskbar"
|
||||
],
|
||||
"modules-center": [
|
||||
"clock",
|
||||
],
|
||||
"modules-right": [
|
||||
"tray",
|
||||
"pulseaudio",
|
||||
"custom/spotify",
|
||||
"network",
|
||||
"memory",
|
||||
"cpu",
|
||||
"custom/power",
|
||||
],
|
||||
// Modules
|
||||
"wlr/taskbar": {
|
||||
"format": "{icon} {name}",
|
||||
"on-click": "minimize-raise",
|
||||
},
|
||||
"idle_inhibitor": {
|
||||
"format": "{icon} ",
|
||||
"format-icons":{
|
||||
"activated": "",
|
||||
"deactivated": ""
|
||||
}
|
||||
},
|
||||
"clock": {
|
||||
"interval": 10,
|
||||
"format-alt": " {:%e %b %Y}", // Icon: calendar-alt
|
||||
"format": " {:%I:%M %p}",
|
||||
},
|
||||
"cpu": {
|
||||
"interval": 5,
|
||||
"format": " {usage}%",
|
||||
"states": {
|
||||
"warning": 70,
|
||||
"critical": 90,
|
||||
},
|
||||
"on-click": "foot -e 'htop'",
|
||||
},
|
||||
"memory": {
|
||||
"interval": 5,
|
||||
"format": " {}%", // Icon: memory
|
||||
"on-click": "foot -e 'htop'",
|
||||
"states": {
|
||||
"warning": 70,
|
||||
"critical": 90
|
||||
}
|
||||
},
|
||||
"pulseaudio": {
|
||||
"scroll-step": 1, // %, can be a float
|
||||
"format": "{volume}% {icon}",
|
||||
"format-bluetooth": "{volume}% {icon} {format_source}",
|
||||
"format-bluetooth-muted": " {icon} {format_source}",
|
||||
"format-muted": "婢 {format_source}",
|
||||
"format-source": "{volume}% ",
|
||||
"format-source-muted": "",
|
||||
"format-icons": {
|
||||
"headphone": "",
|
||||
"hands-free": "וֹ",
|
||||
"headset": " ",
|
||||
"phone": "",
|
||||
"portable": "",
|
||||
"car": "",
|
||||
"default": [""]
|
||||
},
|
||||
"on-click": "pavucontrol",
|
||||
"on-scroll-up": "pactl set-sink-volume @DEFAULT_SINK@ +2%",
|
||||
"on-scroll-down": "pactl set-sink-volume @DEFAULT_SINK@ -2%",
|
||||
},
|
||||
"tray": {
|
||||
"icon-size": 18,
|
||||
"spacing":10,
|
||||
},
|
||||
"custom/spotify": {
|
||||
"format": " ",
|
||||
"on-click": "spot",
|
||||
"tooltip": false
|
||||
},
|
||||
"custom/launcher": {
|
||||
"format": " ",
|
||||
"on-click": "nwg-drawer",
|
||||
"tooltip": false
|
||||
},
|
||||
}
|
||||
@ -1,100 +0,0 @@
|
||||
@define-color celadon #b0f2b4;
|
||||
@define-color celeste #baf2e9;
|
||||
@define-color thistle #dfc2f2;
|
||||
@define-color english_violet #51344d;
|
||||
@define-color indian_red #c97064;
|
||||
@define-color black_olive #1f271b;
|
||||
@define-color egg_shell #f8f1dd;
|
||||
|
||||
* {
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
color: @egg_shell;
|
||||
font-family: "GohuFont 14 Nerd Font";
|
||||
font-size: 16px;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
/* The whole bar */
|
||||
#waybar {
|
||||
background: transparent;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
#taskbar {
|
||||
background: transparent;
|
||||
color: @egg_shell;
|
||||
}
|
||||
|
||||
#taskbar button {
|
||||
padding-left: 3px;
|
||||
padding-right: 3px;
|
||||
margin-left: 3px;
|
||||
margin-right: 3px;
|
||||
color: transparent;
|
||||
border-bottom: 2px solid;
|
||||
}
|
||||
|
||||
#taskbar button.active {
|
||||
color: @celeste;
|
||||
}
|
||||
|
||||
.modules-left,
|
||||
.modules-right,
|
||||
.modules-center {
|
||||
margin: 8px 8px 1px 8px;
|
||||
background: transparent;
|
||||
color: @egg_shell;
|
||||
background-color: @english_violet;
|
||||
border-radius: 25px;
|
||||
padding: 0px 10px 0px 10px;
|
||||
}
|
||||
|
||||
/* Every modules */
|
||||
#clock,
|
||||
#cpu,
|
||||
#custom-spotify,
|
||||
#memory,
|
||||
#network,
|
||||
#pulseaudio,
|
||||
#taskbar {
|
||||
padding: 0.5rem 0.6rem;
|
||||
margin: 1px 0px;
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Modules styles
|
||||
* -------------------------------------------------------------------------- */
|
||||
|
||||
#clock {
|
||||
min-width: 140px;
|
||||
}
|
||||
|
||||
#cpu.warning,
|
||||
#cpu.critical,
|
||||
#memory.warning,
|
||||
#memory.critical,
|
||||
#network.disconnected {
|
||||
color: @indian_red;
|
||||
}
|
||||
|
||||
#pulseaudio {
|
||||
padding-top: 6px;
|
||||
}
|
||||
|
||||
#pulseaudio.muted {
|
||||
color: @celeste;
|
||||
}
|
||||
|
||||
#custom-spotify {
|
||||
color: @celadon;
|
||||
}
|
||||
|
||||
#custom-power {
|
||||
margin-left: 15px;
|
||||
margin-right: 15px;
|
||||
font-size: 15px;
|
||||
color: @indian_red;
|
||||
}
|
||||
@ -7,6 +7,7 @@
|
||||
{
|
||||
imports = [
|
||||
../../../shared/modules/apps/firefox/firefox.nix
|
||||
../../../shared/modules/apps/helix.nix
|
||||
../../../shared/modules/home-manager/git-autosync.nix
|
||||
../niri/niri_home.nix
|
||||
./programs.nix
|
||||
@ -18,6 +19,7 @@
|
||||
home.stateVersion = "23.11"; # Please read the comment before changing.
|
||||
|
||||
firefoxApp.enable = true;
|
||||
helixApp.enable = true;
|
||||
fonts.fontconfig.enable = true;
|
||||
|
||||
# Stylix auto-theming - applies to all programs.<name>.enable apps
|
||||
|
||||
@ -40,222 +40,6 @@
|
||||
};
|
||||
};
|
||||
|
||||
#
|
||||
# Editor
|
||||
#
|
||||
helix = {
|
||||
enable = true;
|
||||
# Stylix sets the theme, but we override syntax tokens for minimal highlighting
|
||||
# Philosophy: Only keywords, strings, comments, numbers get color - rest is plain text
|
||||
themes.stylix = {
|
||||
# Inherit Stylix's base theme (UI, palette, etc.)
|
||||
inherits = "stylix";
|
||||
|
||||
# Minimal syntax highlighting - only 4 categories get color
|
||||
# Comments - stand out
|
||||
"comment" = { fg = "yellow"; modifiers = ["italic"]; };
|
||||
|
||||
# Keywords - highlighted and italic
|
||||
"keyword" = { fg = "magenta"; modifiers = ["italic"]; };
|
||||
"keyword.control" = { fg = "magenta"; modifiers = ["italic"]; };
|
||||
"keyword.directive" = { fg = "magenta"; modifiers = ["italic"]; };
|
||||
"keyword.function" = { fg = "magenta"; modifiers = ["italic"]; };
|
||||
"keyword.operator" = { fg = "magenta"; modifiers = ["italic"]; };
|
||||
"keyword.return" = { fg = "magenta"; modifiers = ["italic"]; };
|
||||
"keyword.storage" = { fg = "magenta"; modifiers = ["italic"]; };
|
||||
|
||||
# Strings - highlighted
|
||||
"string" = "green";
|
||||
"string.regexp" = "red";
|
||||
"string.special" = "green";
|
||||
|
||||
# Numbers/constants - highlighted
|
||||
"constant.numeric" = "red";
|
||||
"constant.builtin" = "red";
|
||||
"constant.character.escape" = "red";
|
||||
|
||||
# Functions remain plain text
|
||||
"function" = "text";
|
||||
"function.builtin" = "text";
|
||||
"function.method" = "text";
|
||||
"function.macro" = "text";
|
||||
|
||||
# Variables remain plain text
|
||||
"variable" = "text";
|
||||
"variable.builtin" = "text";
|
||||
"variable.parameter" = "text";
|
||||
"variable.other.member" = "text";
|
||||
|
||||
# Types get subtle highlight
|
||||
"type" = { fg = "cyan"; modifiers = ["italic"]; };
|
||||
"type.builtin" = "cyan";
|
||||
|
||||
# Top-level definitions get accent
|
||||
"function.definition" = { fg = "text"; modifiers = ["bold"]; };
|
||||
"type.definition" = { fg = "text"; modifiers = ["bold"]; };
|
||||
|
||||
# Everything else plain
|
||||
"constructor" = "text";
|
||||
"attribute" = "text";
|
||||
"label" = "text";
|
||||
"namespace" = "text";
|
||||
"tag" = "text";
|
||||
|
||||
# Punctuation slightly dimmed
|
||||
"punctuation" = { fg = "text"; modifiers = ["dim"]; };
|
||||
"punctuation.bracket" = { fg = "text"; modifiers = ["dim"]; };
|
||||
"punctuation.delimiter" = { fg = "text"; modifiers = ["dim"]; };
|
||||
"punctuation.special" = { fg = "text"; modifiers = ["dim"]; };
|
||||
"operator" = { fg = "text"; modifiers = ["dim"]; };
|
||||
|
||||
# Markup
|
||||
"markup.heading" = { fg = "cyan"; modifiers = ["bold"]; };
|
||||
"markup.list" = "magenta";
|
||||
"markup.bold" = { modifiers = ["bold"]; };
|
||||
"markup.italic" = { modifiers = ["italic"]; };
|
||||
"markup.strikethrough" = { modifiers = ["crossed_out"]; };
|
||||
"markup.link.url" = { fg = "blue"; modifiers = ["underlined"]; };
|
||||
"markup.link.text" = "magenta";
|
||||
"markup.quote" = "green";
|
||||
"markup.raw" = "green";
|
||||
};
|
||||
|
||||
settings = {
|
||||
# Standard QWERTY keybindings
|
||||
keys.normal = {
|
||||
# Navigation
|
||||
"S-tab" = "jump_backward";
|
||||
"C-d" = [ "page_cursor_half_down" "align_view_center" ];
|
||||
"C-u" = [ "page_cursor_half_up" "align_view_center" ];
|
||||
|
||||
# Selection
|
||||
C-s = "split_selection_on_newline";
|
||||
C-minus = "merge_selections";
|
||||
C-_ = "merge_consecutive_selections";
|
||||
"C-;" = "flip_selections";
|
||||
"C-:" = "ensure_selections_forward";
|
||||
"C-," = "remove_primary_selection";
|
||||
|
||||
# Misc
|
||||
"C-/" = "toggle_comments";
|
||||
"@" = ":append-output git config get user.email";
|
||||
|
||||
space = {
|
||||
B = ":sh git log -n 5 --format='format:%%h (%%an: %%ar) %%s' --no-patch -L%{cursor_line},+1:%{buffer_name}";
|
||||
x = ":write-buffer-close";
|
||||
X = ":write-quit-all";
|
||||
o = ":config-open";
|
||||
h = "hover";
|
||||
k = "select_references_to_symbol_under_cursor";
|
||||
};
|
||||
|
||||
g = {
|
||||
"/" = "goto_next_buffer";
|
||||
"\\" = "goto_previous_buffer";
|
||||
};
|
||||
|
||||
m.m = [ "select_mode" "match_brackets" "normal_mode" ];
|
||||
};
|
||||
|
||||
keys.select = {
|
||||
"C-d" = [ "page_cursor_half_down" "align_view_center" ];
|
||||
"C-u" = [ "page_cursor_half_up" "align_view_center" ];
|
||||
|
||||
g = {
|
||||
"/" = "goto_next_buffer";
|
||||
"\\" = "goto_previous_buffer";
|
||||
};
|
||||
};
|
||||
|
||||
editor = {
|
||||
auto-format = true;
|
||||
auto-save = true;
|
||||
bufferline = "always";
|
||||
color-modes = true;
|
||||
completion-timeout = 5;
|
||||
cursorcolumn = true;
|
||||
cursorline = true;
|
||||
indent-heuristic = "tree-sitter";
|
||||
line-number = "relative";
|
||||
rulers = [ 120 ];
|
||||
text-width = 120;
|
||||
end-of-line-diagnostics = "hint";
|
||||
|
||||
cursor-shape = {
|
||||
insert = "bar";
|
||||
normal = "block";
|
||||
select = "underline";
|
||||
};
|
||||
|
||||
file-picker.hidden = false;
|
||||
|
||||
indent-guides.render = true;
|
||||
|
||||
inline-diagnostics = {
|
||||
cursor-line = "warning";
|
||||
other-lines = "disable";
|
||||
prefix-len = 5;
|
||||
max-diagnostics = 1;
|
||||
max-wrap = 30;
|
||||
};
|
||||
|
||||
lsp = {
|
||||
display-messages = true;
|
||||
display-inlay-hints = true;
|
||||
};
|
||||
|
||||
soft-wrap = {
|
||||
enable = true;
|
||||
max-wrap = 30;
|
||||
};
|
||||
|
||||
statusline = {
|
||||
left = [ "mode" "file-modification-indicator" "spinner" "version-control" ];
|
||||
center = [ "file-name" ];
|
||||
right = [ "diagnostics" "selections" "register" "position" "file-encoding" ];
|
||||
mode.normal = "Normal";
|
||||
mode.insert = "Insert";
|
||||
mode.select = "Select";
|
||||
};
|
||||
|
||||
whitespace.render = {
|
||||
space = "all";
|
||||
tab = "all";
|
||||
tabpad = "all";
|
||||
newline = "none";
|
||||
nbsp = "none";
|
||||
};
|
||||
|
||||
whitespace.characters = {
|
||||
space = " ";
|
||||
tab = "⇀";
|
||||
tabpad = " ";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
languages = {
|
||||
language = [
|
||||
{
|
||||
name = "markdown";
|
||||
language-servers = [ "marksman" ];
|
||||
}
|
||||
{
|
||||
name = "nix";
|
||||
language-servers = [ "nil" ];
|
||||
}
|
||||
{
|
||||
name = "python";
|
||||
language-servers = [ "pylsp" ];
|
||||
}
|
||||
];
|
||||
|
||||
language-server.ltex-ls = {
|
||||
command = "ltex-ls";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
#
|
||||
# CLI Tools
|
||||
#
|
||||
|
||||
@ -17,19 +17,22 @@
|
||||
boot.kernelModules = [ "kvm-intel" ];
|
||||
boot.extraModulePackages = [ ];
|
||||
|
||||
# TODO: Update these UUIDs after running nixos-generate-config on actual hardware
|
||||
fileSystems."/" =
|
||||
{ device = "/dev/disk/by-label/NIXROOT";
|
||||
{ device = "/dev/disk/by-uuid/9e7135ed-b924-455b-9fdf-3c9b324fea52";
|
||||
fsType = "ext4";
|
||||
};
|
||||
|
||||
boot.initrd.luks.devices."luks-3e44caf1-e83f-452e-80c9-fdd75d35b237".device = "/dev/disk/by-uuid/3e44caf1-e83f-452e-80c9-fdd75d35b237";
|
||||
|
||||
fileSystems."/boot" =
|
||||
{ device = "/dev/disk/by-label/NIXBOOT";
|
||||
{ device = "/dev/disk/by-uuid/8350-826A";
|
||||
fsType = "vfat";
|
||||
options = [ "fmask=0077" "dmask=0077" ];
|
||||
};
|
||||
|
||||
swapDevices = [ ];
|
||||
swapDevices =
|
||||
[ { device = "/dev/disk/by-uuid/aa923d84-bc16-40d9-a100-113bb31c761d"; }
|
||||
];
|
||||
|
||||
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
||||
# (the default) this is the recommended approach. When using systemd-networkd it's
|
||||
|
||||
@ -60,6 +60,14 @@
|
||||
};
|
||||
};
|
||||
|
||||
# Icon theme for tray applets (nm-applet, etc.)
|
||||
iconTheme = {
|
||||
enable = true;
|
||||
package = pkgs.papirus-icon-theme;
|
||||
light = "Papirus-Light";
|
||||
dark = "Papirus-Dark";
|
||||
};
|
||||
|
||||
# Let plymouth use its own theme
|
||||
targets.plymouth.enable = false;
|
||||
};
|
||||
|
||||
@ -59,6 +59,14 @@
|
||||
};
|
||||
};
|
||||
|
||||
# Icon theme for tray applets (nm-applet, etc.)
|
||||
iconTheme = {
|
||||
enable = true;
|
||||
package = pkgs.papirus-icon-theme;
|
||||
light = "Papirus-Light";
|
||||
dark = "Papirus-Dark";
|
||||
};
|
||||
|
||||
# Let plymouth use its own theme
|
||||
targets.plymouth.enable = false;
|
||||
};
|
||||
|
||||
@ -312,7 +312,12 @@ in
|
||||
};
|
||||
|
||||
# Stylix provides @define-color variables for base16 colors
|
||||
style = ''
|
||||
# Use lib.mkAfter to ensure our styles override Stylix's defaults
|
||||
style = lib.mkAfter ''
|
||||
/* Override Stylix's solid background on waybar window */
|
||||
window#waybar {
|
||||
background: transparent;
|
||||
}
|
||||
/* Keyframes */
|
||||
@keyframes blink-warning {
|
||||
70% { color: @base05; }
|
||||
|
||||
Loading…
Reference in New Issue
Block a user