Compare commits

...

4 Commits

Author SHA1 Message Date
86e0491a97 update system 2026-01-21 13:05:23 +01:00
7a30d561c0 feat: hyprland scrolling 2026-01-18 15:35:34 +01:00
e3e1d93b99 update astro service 2026-01-05 18:11:33 +01:00
648380f91b update system 2026-01-05 13:59:57 +01:00
11 changed files with 737 additions and 94 deletions

36
flake.lock generated
View File

@@ -44,11 +44,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1766881808, "lastModified": 1767556355,
"narHash": "sha256-JR7A2xS3EBPWFeONzhqez5vp7nKEsp7eLj2Ks210Srk=", "narHash": "sha256-RDTUBDQBi9D4eD9iJQWtUDN/13MDLX+KmE+TwwNUp2s=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "d2e0458d6531885600b346e161c38790dc356fa8", "rev": "f894bc4ffde179d178d8deb374fcf9855d1a82b7",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -91,11 +91,11 @@
"xwayland-satellite-unstable": "xwayland-satellite-unstable" "xwayland-satellite-unstable": "xwayland-satellite-unstable"
}, },
"locked": { "locked": {
"lastModified": 1766765523, "lastModified": 1767544157,
"narHash": "sha256-DCk3GKdKZNjpvNuDy9ZVfVwCy3tlm96/UZnYkJO7N44=", "narHash": "sha256-DVTMOUd4uHkDcZXWAqOS+Pa0M9a27G1Ya3B7SFG6BQs=",
"owner": "sodiboo", "owner": "sodiboo",
"repo": "niri-flake", "repo": "niri-flake",
"rev": "a3e638c75d07de759421e6f34bd69c3f9a0a3567", "rev": "d0e2c4bebf9d0b879410736f7abce628976bfb92",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -124,11 +124,11 @@
"niri-unstable": { "niri-unstable": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1766751930, "lastModified": 1767530622,
"narHash": "sha256-83/YSW6c58i/iwGzAFApuMy6MCgoIaROeCcoIGh+ViU=", "narHash": "sha256-ywnL1cc0A6fni7m859ImiBYA8DlXXJ+5OXIlcBqJ2B0=",
"owner": "YaLTeR", "owner": "YaLTeR",
"repo": "niri", "repo": "niri",
"rev": "b5640d5293ad8dca06cb447692ea7cbb21680eb1", "rev": "54c2e2ab476629d17fdba861895f58e7cdac32ab",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -155,11 +155,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1766651565, "lastModified": 1767379071,
"narHash": "sha256-QEhk0eXgyIqTpJ/ehZKg9IKS7EtlWxF3N7DXy42zPfU=", "narHash": "sha256-EgE0pxsrW9jp9YFMkHL9JMXxcqi/OoumPJYwf+Okucw=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "3e2499d5539c16d0d173ba53552a4ff8547f4539", "rev": "fb7944c166a3b630f177938e478f0378e64ce108",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -171,11 +171,11 @@
}, },
"nixpkgs-stable": { "nixpkgs-stable": {
"locked": { "locked": {
"lastModified": 1766736597, "lastModified": 1767480499,
"narHash": "sha256-BASnpCLodmgiVn0M1MU2Pqyoz0aHwar/0qLkp7CjvSQ=", "narHash": "sha256-8IQQUorUGiSmFaPnLSo2+T+rjHtiNWc+OAzeHck7N48=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "f560ccec6b1116b22e6ed15f4c510997d99d5852", "rev": "30a3c519afcf3f99e2c6df3b359aec5692054d92",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -194,11 +194,11 @@
"systems": "systems_2" "systems": "systems_2"
}, },
"locked": { "locked": {
"lastModified": 1766918207, "lastModified": 1767553127,
"narHash": "sha256-G/Msy+w6e6W5Z517draGcMC0Fqpl4cfutZS5ijndpyM=", "narHash": "sha256-H6JzPMmvBYlGjIBgrHIS2dFXh05h4bwMJTZTn3IGVtc=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nixvim", "repo": "nixvim",
"rev": "51ae9913767528723397e1b227bd32a080058bb5", "rev": "3d7bcda3d163c1c38e231f81e0e90155b7b9e9bf",
"type": "github" "type": "github"
}, },
"original": { "original": {

View File

@@ -36,16 +36,19 @@
shell.components = { shell.components = {
firefox-pip.enable = true; firefox-pip.enable = true;
# grimblast.enable = true; grimblast.enable = true;
gnome-keyring.enable = true; gnome-keyring.enable = true;
# hyprpicker.enable = true; hyprpicker.enable = true;
kde-connect.enable = true; kde-connect.enable = true;
kitty.enable = true; kitty.enable = true;
swaync.enable = true; swaync.enable = true;
walker.enable = true; walker.enable = true;
waybar.enable = true; waybar.enable = true;
}; };
desktops.niri.enable = true; desktops.hyprland = {
enable = true;
scrolling = true;
};
locale.preset.theaninova.enable = true; locale.preset.theaninova.enable = true;
networking.hosts = { networking.hosts = {
@@ -195,6 +198,14 @@
25565 25565
50765 50765
]; ];
/*
allowedUDPPortRanges = [
{
from = 1;
to = 65535;
}
];
*/
}; };
networkmanager = { networkmanager = {

View File

@@ -181,6 +181,15 @@
]; ];
networking = { networking = {
firewall = {
allowedUDPPortRanges = [
{
from = 1;
to = 65535;
}
];
};
networkmanager = { networkmanager = {
enable = true; enable = true;
plugins = with pkgs; [ networkmanager-openconnect ]; plugins = with pkgs; [ networkmanager-openconnect ];

View File

@@ -13,13 +13,17 @@ let
hyprctl clients -j | jq -r "map(select(.workspace.id == $WORKSPACE) | select(.class == \"$1\") | .address | select(. != $WINDOW)) | .[0]" hyprctl clients -j | jq -r "map(select(.workspace.id == $WORKSPACE) | select(.class == \"$1\") | .address | select(. != $WINDOW)) | .[0]"
''; '';
}; };
cfg = osConfig.desktops.hyprland;
in in
{ {
config = lib.mkIf osConfig.desktops.hyprland.enable { config = lib.mkIf cfg.enable {
wayland.windowManager.hyprland = { wayland.windowManager.hyprland = {
enable = true; enable = true;
settings = { settings = {
general.allow_tearing = true; general = {
allow_tearing = true;
layout = lib.mkIf cfg.scrolling "scrolling";
};
input = { input = {
accel_profile = "flat"; accel_profile = "flat";
kb_layout = osConfig.services.xserver.xkb.layout; kb_layout = osConfig.services.xserver.xkb.layout;
@@ -32,23 +36,43 @@ in
"SUPER,D,fullscreen,1" "SUPER,D,fullscreen,1"
"SUPER,V,fullscreen,0" "SUPER,V,fullscreen,0"
"SUPER_SHIFT,up,movewindow,u"
"SUPER_SHIFT,down,movewindow,d"
"SUPER_SHIFT,left,movewindow,l"
"SUPER_SHIFT,right,movewindow,r"
"SUPER,up,movefocus,u"
"SUPER,down,movefocus,d"
"SUPER,left,movefocus,l"
"SUPER,right,movefocus,r"
"SUPER,f,workspace,r-1" "SUPER,f,workspace,r-1"
"SUPER,h,workspace,r+1" "SUPER,h,workspace,r+1"
"SUPER_SHIFT,f,movetoworkspace,r-1" "SUPER_SHIFT,f,movetoworkspace,r-1"
"SUPER_SHIFT,h,movetoworkspace,r+1" "SUPER_SHIFT,h,movetoworkspace,r+1"
"SUPER,mouse_up,workspace,r+1" ]
"SUPER,mouse_down,workspace,r-1" ++ (
]; if cfg.scrolling then
[
"SUPER,up,layoutmsg,focus u"
"SUPER,down,layoutmsg,focus d"
"SUPER,right,layoutmsg,focus r"
"SUPER,left,layoutmsg,focus l"
"SUPER_SHIFT,up,layoutmsg,movewindowto u"
"SUPER_SHIFT,down,layoutmsg,movewindowto d"
"SUPER_SHIFT,left,layoutmsg,swapcol l"
"SUPER_SHIFT,right,layoutmsg,swapcol r"
"SUPER,mouse_up,layoutmsg,focus r"
"SUPER,mouse_down,layoutmsg,focus l"
]
else
[
"SUPER_SHIFT,up,movewindow,u"
"SUPER_SHIFT,down,movewindow,d"
"SUPER_SHIFT,left,movewindow,l"
"SUPER_SHIFT,right,movewindow,r"
"SUPER,up,movefocus,u"
"SUPER,down,movefocus,d"
"SUPER,left,movefocus,l"
"SUPER,right,movefocus,r"
"SUPER,mouse_up,workspace,r+1"
"SUPER,mouse_down,workspace,r-1"
]
);
bindm = [ bindm = [
"SUPER,mouse:272,movewindow" "SUPER,mouse:272,movewindow"
"SUPER,mouse:273,resizewindow" "SUPER,mouse:273,resizewindow"

View File

@@ -33,9 +33,8 @@
prismlauncher prismlauncher
# chat apps # chat apps
vesktop # vesktop
discord discord
element-desktop
thunderbird thunderbird
signal-desktop signal-desktop
# cinny-desktop # cinny-desktop
@@ -47,8 +46,8 @@
# creative # creative
gimp3 gimp3
inkscape-with-extensions inkscape-with-extensions
scribus # scribus
# audacity audacity
pinta pinta
losslesscut-bin losslesscut-bin
shotcut shotcut

View File

@@ -0,0 +1,167 @@
# Somewhat adapted from https://github.com/catppuccin/nvim/blob/main/lua/catppuccin/groups/syntax.lua
{ C, O }:
{
Comment.fg = C.outline; # just comments
SpecialComment.link = C.keywords; # special things inside a comment
Constant.fg = C.constants; # (preferred) any constant
String.fg = C.strings; # a string constant: "this is a string"
Character.fg = C.keywords; # a character constant: 'c', '\n'
Number.fg = C.numbers; # a number constant: 234, 0xff
Float.fg = C.numbers; # a floating point constant: 2.3e10
Boolean.fg = C.keywords; # a boolean constant: TRUE, false
Identifier.fg = C.on_surface; # (preferred) any variable name
Function.fg = C.functions; # function name (also: methods for classes)
Statement.fg = C.mauve; # (preferred) any statement
Conditional.fg = C.keywords; # if, then, else, endif, switch, etc.
Repeat.fg = C.keywords; # for, do, while, etc.
Label.fg = C.keywords; # case, default, etc.
Operator.fg = C.on_surface; # "sizeof", "+", "*", etc.
Keyword.fg = C.keywords; # any other keyword
Exception.fg = C.keywords; # try, catch, throw
PreProc.link = C.structures; # (preferred) generic Preprocessor
Include.fg = C.keywords; # preprocessor #include
Define.fg = C.keywords; # preprocessor #define
Macro.fg = C.keywords; # same as Define
PreCondit.fg = C.keywords; # preprocessor #if, #else, #endif, etc.
StorageClass.fg = C.keywords; # static, register, volatile, etc.
Structure.fg = C.structures; # struct, union, enum, etc.
Special.fg = C.keywords; # (preferred) any special symbol
Type.fg = C.types; # (preferred) int, long, char, etc.
Typedef.link = "Type"; # A typedef
SpecialChar.link = "Special"; # special character in a constant
Tag = C.structures; # you can use CTRL-] on this
Delimiter.fg = C.on_surface; # character that needs attention
Debug.link = "Special"; # debugging statements
Underlined.style = [ "underline" ]; # (preferred) text that stands out, HTML links
Bold.style = [ "bold" ];
Italic.style = [ "italic" ];
# ("Ignore", below, may be invisible...)
# Ignore = { }; # (preferred) left blank, hidden |hl-Ignore|
Error = {
bg = C.danger_container; # (preferred) any erroneous construct
fg = C.on_danger_container;
};
Todo = {
bg = C.yellow_container;
fg = C.on_yellow_container;
}; # (preferred) anything that needs extra attention; mostly the keywords TODO FIXME and XXX
qfLineNr.fg = C.yellow;
qfFileName.fg = C.blue;
htmlH1 = {
fg = C.pink;
style = [ "bold" ];
};
htmlH2 = {
fg = C.blue;
style = [ "bold" ];
};
# mkdHeading = { fg = C.peach; style = [ "bold" ]; };
# mkdCode = { bg = C.terminal_black; fg = C.text; };
mkdCodeDelimiter = {
bg = C.base;
fg = C.text;
};
mkdCodeStart = {
fg = C.flamingo;
style = [ "bold" ];
};
mkdCodeEnd = {
fg = C.flamingo;
style = [ "bold" ];
};
# mkdLink = { fg = C.blue; style = [ "underline" ]; };
# debugging
debugPC = {
bg = if O.transparent_background then C.none else C.crust;
}; # used for highlighting the current line in terminal-debug
debugBreakpoint = {
bg = C.base;
fg = C.overlay0;
}; # used for breakpoint colors in terminal-debug
# illuminate
illuminatedWord = {
bg = C.surface1;
};
illuminatedCurWord = {
bg = C.surface1;
};
# diff
Added.fg = C.green;
Changed.fg = C.blue;
diffAdded.fg = C.green;
diffRemoved.fg = C.red;
diffChanged.fg = C.blue;
diffOldFile.fg = C.yellow;
diffNewFile.fg = C.peach;
diffFile.fg = C.blue;
diffLine.fg = C.overlay0;
diffIndexLine.fg = C.teal;
DiffAdd = {
bg = U.darken C.green 0.18 C.base;
}; # diff mode: Added line |diff.txt|
DiffChange = {
bg = U.darken C.blue 0.07 C.base;
}; # diff mode: Changed line |diff.txt|
DiffDelete = {
bg = U.darken C.red 0.18 C.base;
}; # diff mode: Deleted line |diff.txt|
DiffText = {
bg = U.darken C.blue 0.30 C.base;
}; # diff mode: Changed text within a changed line |diff.txt|
# NeoVim
healthError.fg = C.red;
healthSuccess.fg = C.teal;
healthWarning.fg = C.yellow;
# misc
# glyphs
GlyphPalette1.fg = C.red;
GlyphPalette2.fg = C.teal;
GlyphPalette3.fg = C.yellow;
GlyphPalette4.fg = C.blue;
GlyphPalette6.fg = C.teal;
GlyphPalette7.fg = C.text;
GlyphPalette9.fg = C.red;
# rainbow
rainbow1.fg = C.red;
rainbow2.fg = C.peach;
rainbow3.fg = C.yellow;
rainbow4.fg = C.green;
rainbow5.fg = C.sapphire;
rainbow6.fg = C.lavender;
# csv
csvCol0.fg = C.red;
csvCol1.fg = C.peach;
csvCol2.fg = C.yellow;
csvCol3.fg = C.green;
csvCol4.fg = C.sky;
csvCol5.fg = C.blue;
csvCol6.fg = C.lavender;
csvCol7.fg = C.mauve;
csvCol8.fg = C.pink;
# markdown
markdownHeadingDelimiter = {
fg = C.peach;
style = [ "bold" ];
};
markdownCode.fg = C.flamingo;
markdownCodeBlock.fg = C.flamingo;
markdownLinkText = {
fg = C.blue;
style = [ "underline" ];
};
markdownH1.link = "rainbow1";
markdownH2.link = "rainbow2";
markdownH3.link = "rainbow3";
markdownH4.link = "rainbow4";
markdownH5.link = "rainbow5";
markdownH6.link = "rainbow6";
}

View File

@@ -0,0 +1,415 @@
{ C, O }:
let
self = {
# Reference: https://github.com/nvim-treesitter/nvim-treesitter/blob/master/CONTRIBUTING.md
# Identifiers
"@variable".fg = C.on_surface; # Any variable name that does not have another highlight.
"@variable.builtin".fg = C.keywords; # Variable names that are defined by the languages, like this or self.
"@variable.parameter".fg = C.on_surface; # For parameters of a function.
"@variable.member".fg = C.properties; # For fields.
"@constant".fg = C.constants; # For constants
"@constant.builtin".fg = C.keywords; # For constant that are built in the language: nil in Lua.
"@constant.macro".link = "Macro"; # For constants that are defined by macros: NULL in C.
"@module".fg = C.structures; # For identifiers referring to modules and namespaces.
"@label".link = "Label"; # For labels: label: in C and :label: in Lua.
# Literals
"@string".link = "String"; # For strings.
/*
"@string.documentation" = {
fg = C.teal;
style = O.styles.strings or { };
}; # For strings documenting code (e.g. Python docstrings).
"@string.regexp" = {
fg = C.pink;
style = O.styles.strings or { };
}; # For regexes.
"@string.escape" = {
fg = C.pink;
style = O.styles.strings or { };
}; # For escape characters within a string.
"@string.special".link = "Special"; # other special strings (e.g. dates)
"@string.special.path".link = "Special"; # filenames
"@string.special.symbol".fg = C.flamingo; # symbols or atoms
"@string.special.url" = {
fg = C.blue;
style = [
"italic"
"underline"
];
}; # urls, links and emails
"@punctuation.delimiter.regex" = {
link = "@string.regexp";
};
*/
"@character".link = "Character"; # character literals
"@character.special".link = "SpecialChar"; # special characters (e.g. wildcards)
"@boolean".link = "Boolean"; # For booleans.
"@number".link = "Number"; # For all numbers
"@number.float".link = "Float"; # For floats.
# Types
"@type".link = "Type"; # For types.
"@type.builtin".fg = C.keywords; # For builtin types.
"@type.definition".link = "Type"; # type definitions (e.g. `typedef` in C)
"@attribute".fg = C.properties; # attribute annotations (e.g. Python decorators)
"@property".fg = C.properties; # fields, like accessing `bar` property on `foo.bar`. Overriden later for data languages and CSS.
# Functions
"@function".link = "Function"; # For function (calls and definitions).
"@function.builtin" = {
fg = C.functions;
style = [ "bold" ];
}; # For builtin functions: table.insert in Lua.
"@function.call".link = "Function"; # function calls
"@function.macro".link = "Macro"; # For macro defined functions (calls and definitions): each macro_rules in Rust.
"@function.method".link = "Function"; # For method definitions.
"@function.method.call".link = "Function"; # For method calls.
"@constructor" = {
fg = C.yellow;
}; # For constructor calls and definitions: = { } in Lua, and Java constructors.
"@operator" = {
link = "Operator";
}; # For any operator: +, but also -> and * in C.
# Keywords
"@keyword".link = "Keyword"; # For keywords that don't fall in previous categories.
"@keyword.modifier".link = "Keyword"; # For keywords modifying other constructs (e.g. `const`, `static`, `public`)
"@keyword.type".link = "Keyword"; # For keywords describing composite types (e.g. `struct`, `enum`)
"@keyword.coroutine".link = "Keyword"; # For keywords related to coroutines (e.g. `go` in Go, `async/await` in Python)
"@keyword.function" = {
fg = C.mauve;
style = O.styles.keywords or { };
}; # For keywords used to define a function.
"@keyword.operator" = {
fg = C.mauve;
style = O.styles.keywords or { };
}; # For new keyword operator
"@keyword.import" = {
link = "Include";
}; # For includes: #include in C, use or extern crate in Rust, or require in Lua.
"@keyword.repeat" = {
link = "Repeat";
}; # For keywords related to loops.
"@keyword.return" = {
fg = C.mauve;
style = O.styles.keywords or { };
};
"@keyword.debug".link = "Exception"; # For keywords related to debugging
"@keyword.exception".link = "Exception"; # For exception related keywords.
"@keyword.conditional".link = "Conditional"; # For keywords related to conditionals.
"@keyword.conditional.ternary".link = "Operator"; # For ternary operators (e.g. `?` / `:`)
"@keyword.directive".link = "PreProc"; # various preprocessor directives & shebangs
"@keyword.directive.define".link = "Define"; # preprocessor definition directives
"@keyword.export" = {
fg = C.mauve;
style = O.styles.keywords;
}; # JS & derivative
# Punctuation
"@punctuation.delimiter".link = "Delimiter"; # For delimiters (e.g. `;` / `.` / `,`).
"@punctuation.bracket".fg = C.overlay2; # For brackets and parenthesis.
"@punctuation.special".link = "Special"; # For special punctuation that does not fall in the categories before (e.g. `{}` in string interpolation).
# Comment
"@comment".link = "Comment";
"@comment.documentation".link = "Comment"; # For comments documenting code
"@comment.error" = {
fg = C.base;
bg = C.red;
};
"@comment.warning" = {
fg = C.base;
bg = C.yellow;
};
"@comment.hint" = {
fg = C.base;
bg = C.blue;
};
"@comment.todo" = {
fg = C.base;
bg = C.flamingo;
};
"@comment.note" = {
fg = C.base;
bg = C.rosewater;
};
# Markup
"@markup" = {
fg = C.text;
}; # For strings considerated text in a markup language.
"@markup.strong" = {
fg = C.red;
style = [ "bold" ];
}; # bold
"@markup.italic" = {
fg = C.red;
style = [ "italic" ];
}; # italic
"@markup.strikethrough" = {
fg = C.text;
style = [ "strikethrough" ];
}; # strikethrough text
"@markup.underline" = {
link = "Underlined";
}; # underlined text
"@markup.heading".fg = C.blue; # titles like: # Example
"@markup.heading.markdown".style = [ "bold" ]; # bold headings in markdown, but not in HTML or other markup
"@markup.math".fg = C.blue; # math environments (e.g. `$ ... $` in LaTeX)
"@markup.quote".fg = C.pink; # block quotes
"@markup.environment".fg = C.pink; # text environments of markup languages
"@markup.environment.name".fg = C.blue; # text indicating the type of an environment
"@markup.link".fg = C.lavender; # text references, footnotes, citations, etc.
"@markup.link.label".fg = C.lavender; # link, reference descriptions
"@markup.link.url" = {
fg = C.blue;
style = [
"italic"
"underline"
];
}; # urls, links and emails
"@markup.raw" = {
fg = C.green;
}; # used for inline code in markdown and for doc in python (""")
"@markup.list" = {
fg = C.teal;
};
"@markup.list.checked" = {
fg = C.green;
}; # todo notes
"@markup.list.unchecked" = {
fg = C.overlay1;
}; # todo notes
# Diff
"@diff.plus" = {
link = "diffAdded";
}; # added text (for diff files)
"@diff.minus" = {
link = "diffRemoved";
}; # deleted text (for diff files)
"@diff.delta" = {
link = "diffChanged";
}; # deleted text (for diff files)
# Tags
"@tag" = {
fg = C.blue;
}; # Tags like HTML tag names.
"@tag.builtin" = {
fg = C.blue;
}; # JSX tag names.
"@tag.attribute" = {
fg = C.yellow;
style = O.styles.miscs or [ "italic" ];
}; # XML/HTML attributes (foo in foo="bar").
"@tag.delimiter" = {
fg = C.teal;
}; # Tag delimiter like < > /
# Misc
"@error" = {
link = "Error";
};
# Language specific:
"@function.builtin.bash" = {
fg = C.red;
style = O.styles.miscs or [ "italic" ];
};
"@variable.parameter.bash" = {
fg = C.green;
};
"@markup.heading.1.markdown".link = "rainbow1";
"@markup.heading.2.markdown".link = "rainbow2";
"@markup.heading.3.markdown".link = "rainbow3";
"@markup.heading.4.markdown".link = "rainbow4";
"@markup.heading.5.markdown".link = "rainbow5";
"@markup.heading.6.markdown".link = "rainbow6";
"@markup.heading.html" = {
link = "@markup";
};
"@markup.heading.1.html" = {
link = "@markup";
};
"@markup.heading.2.html" = {
link = "@markup";
};
"@markup.heading.3.html" = {
link = "@markup";
};
"@markup.heading.4.html" = {
link = "@markup";
};
"@markup.heading.5.html" = {
link = "@markup";
};
"@markup.heading.6.html" = {
link = "@markup";
};
"@constant.java" = {
fg = C.teal;
};
"@property.css" = {
fg = C.blue;
};
"@property.scss" = {
fg = C.blue;
};
"@property.id.css" = {
fg = C.yellow;
};
"@property.class.css" = {
fg = C.yellow;
};
"@type.css" = {
fg = C.lavender;
};
"@type.tag.css" = {
fg = C.blue;
};
"@string.plain.css" = {
fg = C.text;
};
"@number.css" = {
fg = C.peach;
};
"@keyword.directive.css" = {
link = "Keyword";
}; # CSS at-rules
"@string.special.url.html" = {
fg = C.green;
}; # Links in href, src attributes.
"@markup.link.label.html" = {
fg = C.text;
}; # Text between <a></a> tags.
"@character.special.html" = {
fg = C.red;
}; # Symbols such as &nbsp;.
"@constructor.lua" = {
link = "@punctuation.bracket";
}; # For constructor calls and definitions: = { } in Lua.
"@constructor.python" = {
fg = C.sky;
}; # __init__(), __new__().
"@label.yaml" = {
fg = C.yellow;
}; # Anchor and alias names.
"@string.special.symbol.ruby" = {
fg = C.flamingo;
};
"@function.method.php" = {
link = "Function";
};
"@function.method.call.php" = {
link = "Function";
};
"@keyword.import.c" = {
fg = C.yellow;
};
"@keyword.import.cpp" = {
fg = C.yellow;
};
"@attribute.c_sharp" = {
fg = C.yellow;
};
"@comment.warning.gitcommit" = {
fg = C.yellow;
};
"@string.special.path.gitignore" = {
fg = C.text;
};
gitcommitSummary = {
fg = C.rosewater;
style = O.styles.miscs or [ "italic" ];
};
zshKSHFunction = {
link = "Function";
};
# Legacy highlights
"@parameter" = self."@variable.parameter";
"@field" = self."@variable.member";
"@namespace" = self."@module";
"@float" = self."@number.float";
"@symbol" = self."@string.special.symbol";
"@string.regex" = self."@string.regexp";
"@text" = self."@markup";
"@text.strong" = self."@markup.strong";
"@text.emphasis" = self."@markup.italic";
"@text.underline" = self."@markup.underline";
"@text.strike" = self."@markup.strikethrough";
"@text.uri" = self."@markup.link.url";
"@text.math" = self."@markup.math";
"@text.environment" = self."@markup.environment";
"@text.environment.name" = self."@markup.environment.name";
"@text.title" = self."@markup.heading";
"@text.literal" = self."@markup.raw";
"@text.reference" = self."@markup.link";
"@text.todo.checked" = self."@markup.list.checked";
"@text.todo.unchecked" = self."@markup.list.unchecked";
"@text.todo" = self."@comment.todo";
"@text.warning" = self."@comment.warning";
"@text.note" = self."@comment.note";
"@text.danger" = self."@comment.error";
"@method" = self."@function.method";
"@method.call" = self."@function.method.call";
"@text.diff.add" = self."@diff.plus";
"@text.diff.delete" = self."@diff.minus";
"@type.qualifier" = self."@keyword.modifier";
"@keyword.storage" = self."@keyword.modifier";
"@define" = self."@keyword.directive.define";
"@preproc" = self."@keyword.directive";
"@storageclass" = self."@keyword.storage";
"@conditional" = self."@keyword.conditional";
"@exception" = self."@keyword.exception";
"@include" = self."@keyword.import";
"@repeat" = self."@keyword.repeat";
"@symbol.ruby" = self."@string.special.symbol.ruby";
"@variable.member.yaml" = self."@field.yaml";
"@text.title.1.markdown" = self."@markup.heading.1.markdown";
"@text.title.2.markdown" = self."@markup.heading.2.markdown";
"@text.title.3.markdown" = self."@markup.heading.3.markdown";
"@text.title.4.markdown" = self."@markup.heading.4.markdown";
"@text.title.5.markdown" = self."@markup.heading.5.markdown";
"@text.title.6.markdown" = self."@markup.heading.6.markdown";
"@method.php" = self."@function.method.php";
"@method.call.php" = self."@function.method.call.php";
};
in
self

View File

@@ -12,6 +12,7 @@ in
{ {
options.desktops.hyprland = { options.desktops.hyprland = {
enable = lib.mkEnableOption "Enable a DE based on Hyprland"; enable = lib.mkEnableOption "Enable a DE based on Hyprland";
scrolling = lib.mkEnableOption "Hyprland scrolling wm";
}; };
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
@@ -34,8 +35,12 @@ in
}; };
input.numlock_by_default = true; input.numlock_by_default = true;
}; };
plugins = with pkgs.hyprlandPlugins; [ plugins = lib.mkIf cfg.scrolling (
]; with pkgs.hyprlandPlugins;
[
hyprscrolling
]
);
}; };
home = { home = {
packages = with pkgs; [ grim ]; packages = with pkgs; [ grim ];

View File

@@ -20,36 +20,47 @@ in
}; };
}; };
config = mkIf cfg.enable { config =
services.udev.extraRules = '' let
KERNEL=="hidraw*", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="0b1c", MODE="0660", GROUP="input" name = "Astro A50";
''; nick = "A50";
users.extraGroups.input.members = [ username ]; pipewireFilter = bitrate: {
home-manager.users.${username} = "media.class" = "Audio/Sink";
let "alsa.components" = "USB046d:0b1c";
name = "Astro A50"; "alsa.resolution_bits" = bitrate;
nick = "A50"; };
filter = bitrate: { serviceName = "astro-a50-dock-detection";
"media.class" = "Audio/Sink"; nodeNameIn = "astro-a50-eq-harman-in";
"alsa.components" = "USB046d:0b1c"; hidrawName = "hidraw_astro_a50";
"alsa.resolution_bits" = bitrate; hidrawPath = "/dev/${hidrawName}";
}; deviceUnit = "dev-${hidrawName}.device";
nodeNameIn = "astro-a50-eq-harman-in"; in
in
{ mkIf cfg.enable {
services.udev.extraRules = lib.strings.join ", " [
"KERNEL==\"hidraw*\""
"ATTRS{idVendor}==\"046d\""
"ATTRS{idProduct}==\"0b1c\""
"MODE=\"0660\""
"GROUP=\"input\""
"TAG+=\"systemd\""
"SYMLINK+=\"${hidrawName}\""
];
users.extraGroups.input.members = [ username ];
home-manager.users.${username} = {
home.packages = with pkgs; [ zam-plugins ]; home.packages = with pkgs; [ zam-plugins ];
xdg.configFile = { xdg.configFile = {
"wireplumber/wireplumber.conf.d/51-astro-a50.conf".text = builtins.toJSON { "wireplumber/wireplumber.conf.d/51-astro-a50.conf".text = builtins.toJSON {
"monitor.alsa.rules" = [ "monitor.alsa.rules" = [
{ {
matches = [ (filter 16) ]; matches = [ (pipewireFilter 16) ];
actions.update-props = { actions.update-props = {
"node.description" = "${name} Chat"; "node.description" = "${name} Chat";
"node.nick" = "${nick} Chat"; "node.nick" = "${nick} Chat";
}; };
} }
{ {
matches = [ (filter 24) ]; matches = [ (pipewireFilter 24) ];
actions.update-props = { actions.update-props = {
"node.description" = name; "node.description" = name;
"node.nick" = nick; "node.nick" = nick;
@@ -62,12 +73,12 @@ in
{ {
name = "libpipewire-module-parametric-equalizer"; name = "libpipewire-module-parametric-equalizer";
args = { args = {
"equalizer.filepath" = builtins.toString ./astro-a50-harman.txt; "equalizer.filepath" = toString ./astro-a50-harman.txt;
"equalizer.description" = "${name} (Harman EQ)"; "equalizer.description" = "${name} (Harman EQ)";
"capture.props" = { "capture.props" = {
"node.name" = nodeNameIn; "node.name" = nodeNameIn;
"filter.smart" = true; "filter.smart" = true;
"filter.smart.target" = filter 24; "filter.smart.target" = pipewireFilter 24;
}; };
"playback.props"."node.name" = "EQ Output"; "playback.props"."node.name" = "EQ Output";
}; };
@@ -75,29 +86,33 @@ in
]; ];
}; };
}; };
systemd.user.services.astro-dock = mkIf (cfg.sinkWhenDocked != null) { systemd.user.services.${serviceName} = mkIf (cfg.sinkWhenDocked != null) {
Unit = { Unit = {
Description = "Astro A50 Dock Detection"; Description = "Astro A50 Dock Detection";
After = [ "pipewire.service" ]; StopPropagatedFrom = [ deviceUnit ];
}; };
Install.WantedBy = [
Install.WantedBy = [ "default.target" ]; "default.target"
deviceUnit
];
Service = { Service = {
Restart = "always"; Restart = "always";
ExecStart = lib.getExe ( RestartSec = "5";
pkgs.writeShellApplication { ExecStart = "-${
name = "astro-dock-detect"; lib.getExe (
runtimeEnv = { pkgs.writeShellApplication {
HID_DEVICE = "/dev/input/by-id/usb-Logitech_A50-if08-hidraw"; name = "astro-dock-detect";
HEADSET_NAME = nodeNameIn; runtimeEnv = {
SPEAKERS_NAME = cfg.sinkWhenDocked; HID_DEVICE = hidrawPath;
}; HEADSET_NAME = nodeNameIn;
text = builtins.readFile ./astro-a50-dock.sh; SPEAKERS_NAME = cfg.sinkWhenDocked;
} };
); text = builtins.readFile ./astro-a50-dock.sh;
}
)
}";
}; };
}; };
}; };
}; };
} }

View File

@@ -57,7 +57,9 @@ in
layout.struts.top = 80; layout.struts.top = 80;
}; };
wayland.windowManager.hyprland.settings = { wayland.windowManager.hyprland.settings = {
general.layout = "master"; plugin.hyprscrolling = lib.mkIf config.desktops.hyprland.scrolling {
column_width = 0.4;
};
master = { master = {
orientation = "center"; orientation = "center";
slave_count_for_center_master = 0; slave_count_for_center_master = 0;
@@ -65,19 +67,13 @@ in
allow_small_split = true; allow_small_split = true;
}; };
render.direct_scanout = 0; render.direct_scanout = 0;
/*
monitor = [
"${monitorline},sdrbrightness,1.3"
"DP-3,addreserved,340,0,0,0"
];
*/
monitorv2 = { monitorv2 = {
output = "DP-3"; output = "DP-3";
mode = "3840x2160@144"; mode = "3840x2160@144";
position = "0x0"; position = "0x0";
scale = 1; scale = 1;
bitdepth = 10; bitdepth = 10;
addreserved = "340,0,0,0"; addreserved = "80,0,0,0";
cm = if cfg.hdr then "hdredid" else "srgb"; cm = if cfg.hdr then "hdredid" else "srgb";
sdr_min_luminance = 0.25; sdr_min_luminance = 0.25;
sdr_max_luminance = 250; sdr_max_luminance = 250;
@@ -88,7 +84,7 @@ in
min_refresh_rate = 48; min_refresh_rate = 48;
no_break_fs_vrr = 1; no_break_fs_vrr = 1;
}; };
experimental.xx_color_management_v4 = true; # experimental.xx_color_management_v4 = true;
}; };
programs.waybar.settings.mainBar = programs.waybar.settings.mainBar =

View File

@@ -19,11 +19,13 @@ in
home-manager.users.${username} = { home-manager.users.${username} = {
wayland.windowManager.hyprland.settings = { wayland.windowManager.hyprland.settings = {
bindr = [ "SUPER,SUPER_L,exec,uwsm app -- ${lib.getExe pkgs.walker}" ]; bindr = [ "SUPER,SUPER_L,exec,uwsm app -- ${lib.getExe pkgs.walker}" ];
layerrule = [ /*
# TODO: Add layer rules for walker layerrule = [
"blur, anyrun" # TODO: Add layer rules for walker
"ignorealpha 0.3, anyrun" "blur, anyrun"
]; "ignorealpha 0.3, anyrun"
];
*/
}; };
programs.niri.settings.binds."Mod+Space".action.spawn = [ (lib.getExe pkgs.walker) ]; programs.niri.settings.binds."Mod+Space".action.spawn = [ (lib.getExe pkgs.walker) ];
home.packages = with pkgs; [ home.packages = with pkgs; [