diff --git a/flake.lock b/flake.lock
index 9d337e7..a738c82 100644
--- a/flake.lock
+++ b/flake.lock
@@ -200,11 +200,11 @@
},
"nixpkgs": {
"locked": {
- "lastModified": 1770464364,
- "narHash": "sha256-z5NJPSBwsLf/OfD8WTmh79tlSU8XgIbwmk6qB1/TFzY=",
+ "lastModified": 1770617025,
+ "narHash": "sha256-1jZvgZoAagZZB6NwGRv2T2ezPy+X6EFDsJm+YSlsvEs=",
"owner": "nixos",
"repo": "nixpkgs",
- "rev": "23d72dabcb3b12469f57b37170fcbc1789bd7457",
+ "rev": "2db38e08fdadcc0ce3232f7279bab59a15b94482",
"type": "github"
},
"original": {
diff --git a/flake.nix b/flake.nix
index 5de3f38..470ad10 100644
--- a/flake.nix
+++ b/flake.nix
@@ -51,6 +51,7 @@
inherit inputs outputs timeZone system;
};
modules = [
+ stylix.nixosModules.stylix
# Setup home manager
inputs.home-manager.nixosModules.home-manager {
home-manager.useGlobalPkgs = true;
@@ -69,6 +70,7 @@
inherit inputs outputs timeZone system;
};
modules = [
+ stylix.nixosModules.stylix
# Setup home manager
inputs.home-manager.nixosModules.home-manager {
home-manager.useGlobalPkgs = true;
diff --git a/jaci/modules/home-manager/home.nix b/jaci/modules/home-manager/home.nix
index a446a05..721c1ce 100644
--- a/jaci/modules/home-manager/home.nix
+++ b/jaci/modules/home-manager/home.nix
@@ -69,9 +69,13 @@
# Git setup
programs.git = {
- enable = true;
- userEmail = email;
- userName = fullName;
+ enable = true;
+ settings = {
+ user.name = fullName;
+ user.email = email;
+ init.defaultBranch = "main";
+ pull.ff = "only";
+ };
};
# Zsh setup
diff --git a/jaci/modules/labwc/labwc_conf.nix b/jaci/modules/labwc/labwc_conf.nix
index fb47d10..1e558cb 100644
--- a/jaci/modules/labwc/labwc_conf.nix
+++ b/jaci/modules/labwc/labwc_conf.nix
@@ -57,6 +57,7 @@
environment.systemPackages = with pkgs; lib.lists.flatten [
[
bash
+ file-roller # for thunar archive plugin
foot
git
glib
@@ -98,7 +99,7 @@
thunar-volman
];
};
- programs.file-roller.enable = true;
+ # file-roller added to environment.systemPackages above
programs.xfconf.enable = true;
programs.zsh.enable = true;
diff --git a/luci/modules/home-manager/home.nix b/luci/modules/home-manager/home.nix
index 13dc107..d6b3699 100644
--- a/luci/modules/home-manager/home.nix
+++ b/luci/modules/home-manager/home.nix
@@ -58,8 +58,12 @@ in
# Git setup
programs.git = {
enable = true;
- userEmail = email;
- userName = fullName;
+ settings = {
+ user.name = fullName;
+ user.email = email;
+ init.defaultBranch = "main";
+ pull.ff = "only";
+ };
};
programs = {
diff --git a/nate-work/default.nix b/nate-work/default.nix
index a328da4..ac282c7 100644
--- a/nate-work/default.nix
+++ b/nate-work/default.nix
@@ -4,7 +4,7 @@
fullName = "Nate Anderson";
email = "nate.anderson@vasion.com";
hostName = "nate-vasion";
- desktop = "sway";
+ desktop = "niri";
gaming = true;
in
{
@@ -21,9 +21,80 @@
installGaming = gaming;
};
+ # Stylix theming - auto-generate color scheme from wallpaper
+ stylix = {
+ enable = true;
+ image = ../shared/modules/services/wallpapers/Dark/IU-Dark.jpg;
+ polarity = "dark";
+
+ # System-wide cursor
+ cursor = {
+ package = pkgs.bibata-cursors;
+ name = "Bibata-Modern-Classic";
+ size = 32;
+ };
+
+ # Fonts
+ fonts = {
+ serif = {
+ package = pkgs.lato;
+ name = "Lato";
+ };
+ sansSerif = {
+ package = pkgs.lato;
+ name = "Lato";
+ };
+ monospace = {
+ package = pkgs.maple-mono.NF;
+ name = "Maple Mono NF";
+ };
+ emoji = {
+ package = pkgs.noto-fonts-color-emoji;
+ name = "Noto Color Emoji";
+ };
+ sizes = {
+ applications = 12;
+ desktop = 10;
+ popups = 10;
+ terminal = 11;
+ };
+ };
+
+ # Let plymouth use its own theme
+ targets.plymouth.enable = false;
+ };
+
# Limit the number of generations to keep
boot.loader.systemd-boot.configurationLimit = 5;
+ # Systemd initrd for faster boot
+ boot.initrd.systemd.enable = true;
+
+ # Plymouth boot animation
+ boot.plymouth = {
+ enable = true;
+ theme = "rings";
+ themePackages = with pkgs; [
+ (adi1090x-plymouth-themes.override {
+ selected_themes = [ "rings" ];
+ })
+ ];
+ };
+
+ # Silent boot
+ boot.consoleLogLevel = 0;
+ boot.initrd.verbose = false;
+ boot.kernelParams = [
+ "quiet"
+ "splash"
+ "boot.shell_on_fail"
+ "loglevel=3"
+ "rd.systemd.show_status=false"
+ "rd.udev.log_level=3"
+ "udev.log_priority=3"
+ ];
+ boot.loader.timeout = 0;
+
# Perform garbage collection weekly to maintain low disk usage
nix.gc = {
automatic = true;
diff --git a/nate-work/dotfiles/Passwords.kdbx b/nate-work/dotfiles/Passwords.kdbx
deleted file mode 100644
index 9e3aded..0000000
Binary files a/nate-work/dotfiles/Passwords.kdbx and /dev/null differ
diff --git a/nate-work/dotfiles/bat/themes/Catppuccin Macchiato.tmTheme b/nate-work/dotfiles/bat/themes/Catppuccin Macchiato.tmTheme
deleted file mode 100644
index 82baa1a..0000000
--- a/nate-work/dotfiles/bat/themes/Catppuccin Macchiato.tmTheme
+++ /dev/null
@@ -1,2059 +0,0 @@
-
-
-
-
- name
- Catppuccin Macchiato
- semanticClass
- theme.dark.catppuccin-macchiato
- uuid
- 02b2bdf3-9eb7-4396-bf04-f17f1468f99f
- author
- Catppuccin Org
- colorSpaceName
- sRGB
- settings
-
-
- settings
-
- background
- #24273a
- foreground
- #cad3f5
- caret
- #f4dbd6
- lineHighlight
- #363a4f
- misspelling
- #ed8796
- accent
- #c6a0f6
- selection
- #939ab740
- activeGuide
- #494d64
- findHighlight
- #455c6d
- gutterForeground
- #8087a2
-
-
-
- name
- Basic text & variable names (incl. leading punctuation)
- scope
- text, source, variable.other.readwrite, punctuation.definition.variable
- settings
-
- foreground
- #cad3f5
-
-
-
- name
- Parentheses, Brackets, Braces
- scope
- punctuation
- settings
-
- foreground
- #939ab7
- fontStyle
-
-
-
-
- name
- Comments
- scope
- comment, punctuation.definition.comment
- settings
-
- foreground
- #6e738d
- fontStyle
- italic
-
-
-
- scope
- string, punctuation.definition.string
- settings
-
- foreground
- #a6da95
-
-
-
- scope
- constant.character.escape
- settings
-
- foreground
- #f5bde6
-
-
-
- name
- Booleans, constants, numbers
- scope
- constant.numeric, variable.other.constant, entity.name.constant, constant.language.boolean, constant.language.false, constant.language.true, keyword.other.unit.user-defined, keyword.other.unit.suffix.floating-point
- settings
-
- foreground
- #f5a97f
-
-
-
- scope
- keyword, keyword.operator.word, keyword.operator.new, variable.language.super, support.type.primitive, storage.type, storage.modifier, punctuation.definition.keyword
- settings
-
- foreground
- #c6a0f6
- fontStyle
-
-
-
-
- scope
- entity.name.tag.documentation
- settings
-
- foreground
- #c6a0f6
-
-
-
- name
- Punctuation
- scope
- keyword.operator, punctuation.accessor, punctuation.definition.generic, meta.function.closure punctuation.section.parameters, punctuation.definition.tag, punctuation.separator.key-value
- settings
-
- foreground
- #8bd5ca
-
-
-
- scope
- entity.name.function, meta.function-call.method, support.function, support.function.misc, variable.function
- settings
-
- foreground
- #8aadf4
- fontStyle
- italic
-
-
-
- name
- Classes
- scope
- entity.name.class, entity.other.inherited-class, support.class, meta.function-call.constructor, entity.name.struct
- settings
-
- foreground
- #eed49f
- fontStyle
- italic
-
-
-
- name
- Enum
- scope
- entity.name.enum
- settings
-
- foreground
- #eed49f
- fontStyle
- italic
-
-
-
- name
- Enum member
- scope
- meta.enum variable.other.readwrite, variable.other.enummember
- settings
-
- foreground
- #8bd5ca
-
-
-
- name
- Object properties
- scope
- meta.property.object
- settings
-
- foreground
- #8bd5ca
-
-
-
- name
- Types
- scope
- meta.type, meta.type-alias, support.type, entity.name.type
- settings
-
- foreground
- #eed49f
- fontStyle
- italic
-
-
-
- name
- Decorators
- scope
- meta.annotation variable.function, meta.annotation variable.annotation.function, meta.annotation punctuation.definition.annotation, meta.decorator, punctuation.decorator
- settings
-
- foreground
- #f5a97f
-
-
-
- scope
- variable.parameter, meta.function.parameters
- settings
-
- foreground
- #ee99a0
- fontStyle
- italic
-
-
-
- name
- Built-ins
- scope
- constant.language, support.function.builtin
- settings
-
- foreground
- #ed8796
-
-
-
- scope
- entity.other.attribute-name.documentation
- settings
-
- foreground
- #ed8796
-
-
-
- name
- Preprocessor directives
- scope
- keyword.control.directive, punctuation.definition.directive
- settings
-
- foreground
- #eed49f
-
-
-
- name
- Type parameters
- scope
- punctuation.definition.typeparameters
- settings
-
- foreground
- #91d7e3
-
-
-
- name
- Namespaces
- scope
- entity.name.namespace
- settings
-
- foreground
- #eed49f
-
-
-
- name
- Property names (left hand assignments in json/yaml/css)
- scope
- support.type.property-name.css
- settings
-
- foreground
- #8aadf4
- fontStyle
-
-
-
-
- name
- This/Self keyword
- scope
- variable.language.this, variable.language.this punctuation.definition.variable
- settings
-
- foreground
- #ed8796
-
-
-
- name
- Object properties
- scope
- variable.object.property
- settings
-
- foreground
- #cad3f5
-
-
-
- name
- String template interpolation
- scope
- string.template variable, string variable
- settings
-
- foreground
- #cad3f5
-
-
-
- name
- `new` as bold
- scope
- keyword.operator.new
- settings
-
- fontStyle
- bold
-
-
-
- name
- C++ extern keyword
- scope
- storage.modifier.specifier.extern.cpp
- settings
-
- foreground
- #c6a0f6
-
-
-
- name
- C++ scope resolution
- scope
- entity.name.scope-resolution.template.call.cpp, entity.name.scope-resolution.parameter.cpp, entity.name.scope-resolution.cpp, entity.name.scope-resolution.function.definition.cpp
- settings
-
- foreground
- #eed49f
-
-
-
- name
- C++ doc keywords
- scope
- storage.type.class.doxygen
- settings
-
- fontStyle
-
-
-
-
- name
- C++ operators
- scope
- storage.modifier.reference.cpp
- settings
-
- foreground
- #8bd5ca
-
-
-
- name
- C# Interpolated Strings
- scope
- meta.interpolation.cs
- settings
-
- foreground
- #cad3f5
-
-
-
- name
- C# xml-style docs
- scope
- comment.block.documentation.cs
- settings
-
- foreground
- #cad3f5
-
-
-
- name
- Classes, reflecting the className color in JSX
- scope
- source.css entity.other.attribute-name.class.css, entity.other.attribute-name.parent-selector.css punctuation.definition.entity.css
- settings
-
- foreground
- #eed49f
-
-
-
- name
- Operators
- scope
- punctuation.separator.operator.css
- settings
-
- foreground
- #8bd5ca
-
-
-
- name
- Pseudo classes
- scope
- source.css entity.other.attribute-name.pseudo-class
- settings
-
- foreground
- #8bd5ca
-
-
-
- scope
- source.css constant.other.unicode-range
- settings
-
- foreground
- #f5a97f
-
-
-
- scope
- source.css variable.parameter.url
- settings
-
- foreground
- #a6da95
- fontStyle
-
-
-
-
- name
- CSS vendored property names
- scope
- support.type.vendored.property-name
- settings
-
- foreground
- #91d7e3
-
-
-
- name
- Less/SCSS right-hand variables (@/$-prefixed)
- scope
- source.css meta.property-value variable, source.css meta.property-value variable.other.less, source.css meta.property-value variable.other.less punctuation.definition.variable.less, meta.definition.variable.scss
- settings
-
- foreground
- #ee99a0
-
-
-
- name
- CSS variables (--prefixed)
- scope
- source.css meta.property-list variable, meta.property-list variable.other.less, meta.property-list variable.other.less punctuation.definition.variable.less
- settings
-
- foreground
- #8aadf4
-
-
-
- name
- CSS Percentage values, styled the same as numbers
- scope
- keyword.other.unit.percentage.css
- settings
-
- foreground
- #f5a97f
-
-
-
- name
- CSS Attribute selectors, styled the same as strings
- scope
- source.css meta.attribute-selector
- settings
-
- foreground
- #a6da95
-
-
-
- name
- JSON/YAML keys, other left-hand assignments
- scope
- keyword.other.definition.ini, punctuation.support.type.property-name.json, support.type.property-name.json, punctuation.support.type.property-name.toml, support.type.property-name.toml, entity.name.tag.yaml, punctuation.support.type.property-name.yaml, support.type.property-name.yaml
- settings
-
- foreground
- #8aadf4
- fontStyle
-
-
-
-
- name
- JSON/YAML constants
- scope
- constant.language.json, constant.language.yaml
- settings
-
- foreground
- #f5a97f
-
-
-
- name
- YAML anchors
- scope
- entity.name.type.anchor.yaml, variable.other.alias.yaml
- settings
-
- foreground
- #eed49f
- fontStyle
-
-
-
-
- name
- TOML tables / ini groups
- scope
- support.type.property-name.table, entity.name.section.group-title.ini
- settings
-
- foreground
- #eed49f
-
-
-
- name
- TOML dates
- scope
- constant.other.time.datetime.offset.toml
- settings
-
- foreground
- #f5bde6
-
-
-
- name
- YAML anchor puctuation
- scope
- punctuation.definition.anchor.yaml, punctuation.definition.alias.yaml
- settings
-
- foreground
- #f5bde6
-
-
-
- name
- YAML triple dashes
- scope
- entity.other.document.begin.yaml
- settings
-
- foreground
- #f5bde6
-
-
-
- name
- Markup Diff
- scope
- markup.changed.diff
- settings
-
- foreground
- #f5a97f
-
-
-
- name
- Diff
- scope
- meta.diff.header.from-file, meta.diff.header.to-file, punctuation.definition.from-file.diff, punctuation.definition.to-file.diff
- settings
-
- foreground
- #8aadf4
-
-
-
- name
- Diff Inserted
- scope
- markup.inserted.diff
- settings
-
- foreground
- #a6da95
-
-
-
- name
- Diff Deleted
- scope
- markup.deleted.diff
- settings
-
- foreground
- #ed8796
-
-
-
- name
- dotenv left-hand side assignments
- scope
- variable.other.env
- settings
-
- foreground
- #8aadf4
-
-
-
- name
- dotenv reference to existing env variable
- scope
- string.quoted variable.other.env
- settings
-
- foreground
- #cad3f5
-
-
-
- name
- GDScript functions
- scope
- support.function.builtin.gdscript
- settings
-
- foreground
- #8aadf4
-
-
-
- name
- GDScript constants
- scope
- constant.language.gdscript
- settings
-
- foreground
- #f5a97f
-
-
-
- name
- Comment keywords
- scope
- comment meta.annotation.go
- settings
-
- foreground
- #ee99a0
-
-
-
- name
- go:embed, go:build, etc.
- scope
- comment meta.annotation.parameters.go
- settings
-
- foreground
- #f5a97f
-
-
-
- name
- Go constants (nil, true, false)
- scope
- constant.language.go
- settings
-
- foreground
- #f5a97f
-
-
-
- name
- GraphQL variables
- scope
- variable.graphql
- settings
-
- foreground
- #cad3f5
-
-
-
- name
- GraphQL aliases
- scope
- string.unquoted.alias.graphql
- settings
-
- foreground
- #f0c6c6
-
-
-
- name
- GraphQL enum members
- scope
- constant.character.enum.graphql
- settings
-
- foreground
- #8bd5ca
-
-
-
- name
- GraphQL field in types
- scope
- meta.objectvalues.graphql constant.object.key.graphql string.unquoted.graphql
- settings
-
- foreground
- #f0c6c6
-
-
-
- name
- HTML/XML DOCTYPE as keyword
- scope
- keyword.other.doctype, meta.tag.sgml.doctype punctuation.definition.tag, meta.tag.metadata.doctype entity.name.tag, meta.tag.metadata.doctype punctuation.definition.tag
- settings
-
- foreground
- #c6a0f6
-
-
-
- name
- HTML/XML-like <tags/>
- scope
- entity.name.tag
- settings
-
- foreground
- #8aadf4
- fontStyle
-
-
-
-
- name
- Special characters like &
- scope
- text.html constant.character.entity, text.html constant.character.entity punctuation, constant.character.entity.xml, constant.character.entity.xml punctuation, constant.character.entity.js.jsx, constant.charactger.entity.js.jsx punctuation, constant.character.entity.tsx, constant.character.entity.tsx punctuation
- settings
-
- foreground
- #ed8796
-
-
-
- name
- HTML/XML tag attribute values
- scope
- entity.other.attribute-name
- settings
-
- foreground
- #eed49f
-
-
-
- name
- Components
- scope
- support.class.component, support.class.component.jsx, support.class.component.tsx, support.class.component.vue
- settings
-
- foreground
- #f5bde6
- fontStyle
-
-
-
-
- name
- Annotations
- scope
- punctuation.definition.annotation, storage.type.annotation
- settings
-
- foreground
- #f5a97f
-
-
-
- name
- Java enums
- scope
- constant.other.enum.java
- settings
-
- foreground
- #8bd5ca
-
-
-
- name
- Java imports
- scope
- storage.modifier.import.java
- settings
-
- foreground
- #cad3f5
-
-
-
- name
- Javadoc
- scope
- comment.block.javadoc.java keyword.other.documentation.javadoc.java
- settings
-
- fontStyle
-
-
-
-
- name
- Exported Variable
- scope
- meta.export variable.other.readwrite.js
- settings
-
- foreground
- #ee99a0
-
-
-
- name
- JS/TS constants & properties
- scope
- variable.other.constant.js, variable.other.constant.ts, variable.other.property.js, variable.other.property.ts
- settings
-
- foreground
- #cad3f5
-
-
-
- name
- JSDoc; these are mainly params, so styled as such
- scope
- variable.other.jsdoc, comment.block.documentation variable.other
- settings
-
- foreground
- #ee99a0
- fontStyle
-
-
-
-
- name
- JSDoc keywords
- scope
- storage.type.class.jsdoc
- settings
-
- fontStyle
-
-
-
-
- scope
- support.type.object.console.js
- settings
-
- foreground
- #cad3f5
-
-
-
- name
- Node constants as keywords (module, etc.)
- scope
- support.constant.node, support.type.object.module.js
- settings
-
- foreground
- #c6a0f6
-
-
-
- name
- implements as keyword
- scope
- storage.modifier.implements
- settings
-
- foreground
- #c6a0f6
-
-
-
- name
- Builtin types
- scope
- constant.language.null.js, constant.language.null.ts, constant.language.undefined.js, constant.language.undefined.ts, support.type.builtin.ts
- settings
-
- foreground
- #c6a0f6
-
-
-
- scope
- variable.parameter.generic
- settings
-
- foreground
- #eed49f
-
-
-
- name
- Arrow functions
- scope
- keyword.declaration.function.arrow.js, storage.type.function.arrow.ts
- settings
-
- foreground
- #8bd5ca
-
-
-
- name
- Decorator punctuations (decorators inherit from blue functions, instead of styleguide peach)
- scope
- punctuation.decorator.ts
- settings
-
- foreground
- #8aadf4
- fontStyle
- italic
-
-
-
- name
- Extra JS/TS keywords
- scope
- keyword.operator.expression.in.js, keyword.operator.expression.in.ts, keyword.operator.expression.infer.ts, keyword.operator.expression.instanceof.js, keyword.operator.expression.instanceof.ts, keyword.operator.expression.is, keyword.operator.expression.keyof.ts, keyword.operator.expression.of.js, keyword.operator.expression.of.ts, keyword.operator.expression.typeof.ts
- settings
-
- foreground
- #c6a0f6
-
-
-
- name
- Julia macros
- scope
- support.function.macro.julia
- settings
-
- foreground
- #8bd5ca
- fontStyle
- italic
-
-
-
- name
- Julia language constants (true, false)
- scope
- constant.language.julia
- settings
-
- foreground
- #f5a97f
-
-
-
- name
- Julia other constants (these seem to be arguments inside arrays)
- scope
- constant.other.symbol.julia
- settings
-
- foreground
- #ee99a0
-
-
-
- name
- LaTeX preamble
- scope
- text.tex keyword.control.preamble
- settings
-
- foreground
- #8bd5ca
-
-
-
- name
- LaTeX be functions
- scope
- text.tex support.function.be
- settings
-
- foreground
- #91d7e3
-
-
-
- name
- LaTeX math
- scope
- constant.other.general.math.tex
- settings
-
- foreground
- #f0c6c6
-
-
-
- name
- Lua docstring keywords
- scope
- comment.line.double-dash.documentation.lua storage.type.annotation.lua
- settings
-
- foreground
- #c6a0f6
- fontStyle
-
-
-
-
- name
- Lua docstring variables
- scope
- comment.line.double-dash.documentation.lua entity.name.variable.lua, comment.line.double-dash.documentation.lua variable.lua
- settings
-
- foreground
- #cad3f5
-
-
-
- scope
- heading.1.markdown punctuation.definition.heading.markdown, heading.1.markdown, markup.heading.atx.1.mdx, markup.heading.atx.1.mdx punctuation.definition.heading.mdx, markup.heading.setext.1.markdown, markup.heading.heading-0.asciidoc
- settings
-
- foreground
- #ed8796
-
-
-
- scope
- heading.2.markdown punctuation.definition.heading.markdown, heading.2.markdown, markup.heading.atx.2.mdx, markup.heading.atx.2.mdx punctuation.definition.heading.mdx, markup.heading.setext.2.markdown, markup.heading.heading-1.asciidoc
- settings
-
- foreground
- #f5a97f
-
-
-
- scope
- heading.3.markdown punctuation.definition.heading.markdown, heading.3.markdown, markup.heading.atx.3.mdx, markup.heading.atx.3.mdx punctuation.definition.heading.mdx, markup.heading.heading-2.asciidoc
- settings
-
- foreground
- #eed49f
-
-
-
- scope
- heading.4.markdown punctuation.definition.heading.markdown, heading.4.markdown, markup.heading.atx.4.mdx, markup.heading.atx.4.mdx punctuation.definition.heading.mdx, markup.heading.heading-3.asciidoc
- settings
-
- foreground
- #a6da95
-
-
-
- scope
- heading.5.markdown punctuation.definition.heading.markdown, heading.5.markdown, markup.heading.atx.5.mdx, markup.heading.atx.5.mdx punctuation.definition.heading.mdx, markup.heading.heading-4.asciidoc
- settings
-
- foreground
- #8aadf4
-
-
-
- scope
- heading.6.markdown punctuation.definition.heading.markdown, heading.6.markdown, markup.heading.atx.6.mdx, markup.heading.atx.6.mdx punctuation.definition.heading.mdx, markup.heading.heading-5.asciidoc
- settings
-
- foreground
- #c6a0f6
-
-
-
- scope
- markup.bold
- settings
-
- foreground
- #ed8796
- fontStyle
- bold
-
-
-
- scope
- markup.italic
- settings
-
- foreground
- #ed8796
- fontStyle
- italic
-
-
-
- scope
- markup.strikethrough
- settings
-
- foreground
- #a5adcb
- fontStyle
- strikethrough
-
-
-
- name
- Markdown auto links
- scope
- punctuation.definition.link, markup.underline.link
- settings
-
- foreground
- #8aadf4
-
-
-
- name
- Markdown links
- scope
- text.html.markdown punctuation.definition.link.title, string.other.link.title.markdown, markup.link, punctuation.definition.constant.markdown, constant.other.reference.link.markdown, markup.substitution.attribute-reference
- settings
-
- foreground
- #b7bdf8
-
-
-
- name
- Markdown code spans
- scope
- punctuation.definition.raw.markdown, markup.inline.raw.string.markdown, markup.raw.block.markdown
- settings
-
- foreground
- #a6da95
-
-
-
- name
- Markdown triple backtick language identifier
- scope
- fenced_code.block.language
- settings
-
- foreground
- #91d7e3
-
-
-
- name
- Markdown triple backticks
- scope
- markup.fenced_code.block punctuation.definition, markup.raw support.asciidoc
- settings
-
- foreground
- #939ab7
-
-
-
- name
- Markdown quotes
- scope
- markup.quote, punctuation.definition.quote.begin
- settings
-
- foreground
- #f5bde6
-
-
-
- name
- Markdown separators
- scope
- meta.separator.markdown
- settings
-
- foreground
- #8bd5ca
-
-
-
- name
- Markdown list bullets
- scope
- punctuation.definition.list.begin.markdown, markup.list.bullet
- settings
-
- foreground
- #8bd5ca
-
-
-
- name
- Nix attribute names
- scope
- entity.other.attribute-name.multipart.nix, entity.other.attribute-name.single.nix
- settings
-
- foreground
- #8aadf4
-
-
-
- name
- Nix parameter names
- scope
- variable.parameter.name.nix
- settings
-
- foreground
- #cad3f5
- fontStyle
-
-
-
-
- name
- Nix interpolated parameter names
- scope
- meta.embedded variable.parameter.name.nix
- settings
-
- foreground
- #b7bdf8
- fontStyle
-
-
-
-
- name
- Nix paths
- scope
- string.unquoted.path.nix
- settings
-
- foreground
- #f5bde6
- fontStyle
-
-
-
-
- name
- PHP Attributes
- scope
- support.attribute.builtin, meta.attribute.php
- settings
-
- foreground
- #eed49f
-
-
-
- name
- PHP Parameters (needed for the leading dollar sign)
- scope
- meta.function.parameters.php punctuation.definition.variable.php
- settings
-
- foreground
- #ee99a0
-
-
-
- name
- PHP Constants (null, __FILE__, etc.)
- scope
- constant.language.php
- settings
-
- foreground
- #c6a0f6
-
-
-
- name
- PHP functions
- scope
- text.html.php support.function
- settings
-
- foreground
- #91d7e3
-
-
-
- name
- PHPdoc keywords
- scope
- keyword.other.phpdoc.php
- settings
-
- fontStyle
-
-
-
-
- name
- Python argument functions reset to text, otherwise they inherit blue from function-call
- scope
- support.variable.magic.python, meta.function-call.arguments.python
- settings
-
- foreground
- #cad3f5
-
-
-
- name
- Python double underscore functions
- scope
- support.function.magic.python
- settings
-
- foreground
- #91d7e3
- fontStyle
- italic
-
-
-
- name
- Python `self` keyword
- scope
- variable.parameter.function.language.special.self.python, variable.language.special.self.python
- settings
-
- foreground
- #ed8796
- fontStyle
- italic
-
-
-
- name
- python keyword flow/logical (for ... in)
- scope
- keyword.control.flow.python, keyword.operator.logical.python
- settings
-
- foreground
- #c6a0f6
-
-
-
- name
- python storage type
- scope
- storage.type.function.python
- settings
-
- foreground
- #c6a0f6
-
-
-
- name
- python function support
- scope
- support.token.decorator.python, meta.function.decorator.identifier.python
- settings
-
- foreground
- #91d7e3
-
-
-
- name
- python function calls
- scope
- meta.function-call.python
- settings
-
- foreground
- #8aadf4
-
-
-
- name
- python function decorators
- scope
- entity.name.function.decorator.python, punctuation.definition.decorator.python
- settings
-
- foreground
- #f5a97f
- fontStyle
- italic
-
-
-
- name
- python placeholder reset to normal string
- scope
- constant.character.format.placeholder.other.python
- settings
-
- foreground
- #f5bde6
-
-
-
- name
- Python exception & builtins such as exit()
- scope
- support.type.exception.python, support.function.builtin.python
- settings
-
- foreground
- #f5a97f
-
-
-
- name
- entity.name.type
- scope
- support.type.python
- settings
-
- foreground
- #f5a97f
-
-
-
- name
- python constants (True/False)
- scope
- constant.language.python
- settings
-
- foreground
- #c6a0f6
-
-
-
- name
- Arguments accessed later in the function body
- scope
- meta.indexed-name.python, meta.item-access.python
- settings
-
- foreground
- #ee99a0
- fontStyle
- italic
-
-
-
- name
- Python f-strings/binary/unicode storage types
- scope
- storage.type.string.python
- settings
-
- foreground
- #a6da95
- fontStyle
- italic
-
-
-
- name
- Python type hints
- scope
- meta.function.parameters.python
- settings
-
- fontStyle
-
-
-
-
- name
- Regex string begin/end in JS/TS
- scope
- string.regexp punctuation.definition.string.begin, string.regexp punctuation.definition.string.end
- settings
-
- foreground
- #f5bde6
-
-
-
- name
- Regex anchors (^, $)
- scope
- keyword.control.anchor.regexp
- settings
-
- foreground
- #c6a0f6
-
-
-
- name
- Regex regular string match
- scope
- string.regexp.ts
- settings
-
- foreground
- #cad3f5
-
-
-
- name
- Regex group parenthesis & backreference (\1, \2, \3, ...)
- scope
- punctuation.definition.group.regexp, keyword.other.back-reference.regexp
- settings
-
- foreground
- #a6da95
-
-
-
- name
- Regex character class []
- scope
- punctuation.definition.character-class.regexp
- settings
-
- foreground
- #eed49f
-
-
-
- name
- Regex character classes (\d, \w, \s)
- scope
- constant.other.character-class.regexp
- settings
-
- foreground
- #f5bde6
-
-
-
- name
- Regex range
- scope
- constant.other.character-class.range.regexp
- settings
-
- foreground
- #f4dbd6
-
-
-
- name
- Regex quantifier
- scope
- keyword.operator.quantifier.regexp
- settings
-
- foreground
- #8bd5ca
-
-
-
- name
- Regex constant/numeric
- scope
- constant.character.numeric.regexp
- settings
-
- foreground
- #f5a97f
-
-
-
- name
- Regex lookaheads, negative lookaheads, lookbehinds, negative lookbehinds
- scope
- punctuation.definition.group.no-capture.regexp, meta.assertion.look-ahead.regexp, meta.assertion.negative-look-ahead.regexp
- settings
-
- foreground
- #8aadf4
-
-
-
- name
- Rust attribute
- scope
- meta.annotation.rust, meta.annotation.rust punctuation, meta.attribute.rust, punctuation.definition.attribute.rust
- settings
-
- foreground
- #eed49f
- fontStyle
- italic
-
-
-
- name
- Rust attribute strings
- scope
- meta.attribute.rust string.quoted.double.rust, meta.attribute.rust string.quoted.single.char.rust
- settings
-
- fontStyle
-
-
-
-
- name
- Rust keyword
- scope
- entity.name.function.macro.rules.rust, storage.type.module.rust, storage.modifier.rust, storage.type.struct.rust, storage.type.enum.rust, storage.type.trait.rust, storage.type.union.rust, storage.type.impl.rust, storage.type.rust, storage.type.function.rust, storage.type.type.rust
- settings
-
- foreground
- #c6a0f6
- fontStyle
-
-
-
-
- name
- Rust u/i32, u/i64, etc.
- scope
- entity.name.type.numeric.rust
- settings
-
- foreground
- #c6a0f6
- fontStyle
-
-
-
-
- name
- Rust generic
- scope
- meta.generic.rust
- settings
-
- foreground
- #f5a97f
-
-
-
- name
- Rust impl
- scope
- entity.name.impl.rust
- settings
-
- foreground
- #eed49f
- fontStyle
- italic
-
-
-
- name
- Rust module
- scope
- entity.name.module.rust
- settings
-
- foreground
- #f5a97f
-
-
-
- name
- Rust trait
- scope
- entity.name.trait.rust
- settings
-
- foreground
- #eed49f
- fontStyle
- italic
-
-
-
- name
- Rust struct
- scope
- storage.type.source.rust
- settings
-
- foreground
- #eed49f
-
-
-
- name
- Rust union
- scope
- entity.name.union.rust
- settings
-
- foreground
- #eed49f
-
-
-
- name
- Rust enum member
- scope
- meta.enum.rust storage.type.source.rust
- settings
-
- foreground
- #8bd5ca
-
-
-
- name
- Rust macro
- scope
- support.macro.rust, meta.macro.rust support.function.rust, entity.name.function.macro.rust
- settings
-
- foreground
- #8aadf4
- fontStyle
- italic
-
-
-
- name
- Rust lifetime
- scope
- storage.modifier.lifetime.rust, entity.name.type.lifetime
- settings
-
- foreground
- #8aadf4
- fontStyle
- italic
-
-
-
- name
- Rust string formatting
- scope
- string.quoted.double.rust constant.other.placeholder.rust
- settings
-
- foreground
- #f5bde6
-
-
-
- name
- Rust return type generic
- scope
- meta.function.return-type.rust meta.generic.rust storage.type.rust
- settings
-
- foreground
- #cad3f5
-
-
-
- name
- Rust functions
- scope
- meta.function.call.rust
- settings
-
- foreground
- #8aadf4
-
-
-
- name
- Rust angle brackets
- scope
- punctuation.brackets.angle.rust
- settings
-
- foreground
- #91d7e3
-
-
-
- name
- Rust constants
- scope
- constant.other.caps.rust
- settings
-
- foreground
- #f5a97f
-
-
-
- name
- Rust function parameters
- scope
- meta.function.definition.rust variable.other.rust
- settings
-
- foreground
- #ee99a0
-
-
-
- name
- Rust closure variables
- scope
- meta.function.call.rust variable.other.rust
- settings
-
- foreground
- #cad3f5
-
-
-
- name
- Rust self
- scope
- variable.language.self.rust
- settings
-
- foreground
- #ed8796
-
-
-
- name
- Rust metavariable names
- scope
- variable.other.metavariable.name.rust, meta.macro.metavariable.rust keyword.operator.macro.dollar.rust
- settings
-
- foreground
- #f5bde6
-
-
-
- name
- Shell shebang
- scope
- comment.line.shebang, comment.line.shebang punctuation.definition.comment, comment.line.shebang, punctuation.definition.comment.shebang.shell, meta.shebang.shell
- settings
-
- foreground
- #f5bde6
- fontStyle
- italic
-
-
-
- name
- Shell shebang command
- scope
- comment.line.shebang constant.language
- settings
-
- foreground
- #8bd5ca
- fontStyle
- italic
-
-
-
- name
- Shell interpolated command
- scope
- meta.function-call.arguments.shell punctuation.definition.variable.shell, meta.function-call.arguments.shell punctuation.section.interpolation, meta.function-call.arguments.shell punctuation.definition.variable.shell, meta.function-call.arguments.shell punctuation.section.interpolation
- settings
-
- foreground
- #ed8796
-
-
-
- name
- Shell interpolated command variable
- scope
- meta.string meta.interpolation.parameter.shell variable.other.readwrite
- settings
-
- foreground
- #f5a97f
- fontStyle
- italic
-
-
-
- scope
- source.shell punctuation.section.interpolation, punctuation.definition.evaluation.backticks.shell
- settings
-
- foreground
- #8bd5ca
-
-
-
- name
- Shell EOF
- scope
- entity.name.tag.heredoc.shell
- settings
-
- foreground
- #c6a0f6
-
-
-
- name
- Shell quoted variable
- scope
- string.quoted.double.shell variable.other.normal.shell
- settings
-
- foreground
- #cad3f5
-
-
-
- scope
- markup.heading.synopsis.man, markup.heading.title.man, markup.heading.other.man, markup.heading.env.man
- settings
-
- foreground
- #c6a0f6
-
-
-
- scope
- markup.heading.commands.man
- settings
-
- foreground
- #8aadf4
-
-
-
- scope
- markup.heading.env.man
- settings
-
- foreground
- #f5bde6
-
-
-
- name
- Man page options
- scope
- entity.name
- settings
-
- foreground
- #8bd5ca
-
-
-
- scope
- markup.heading.1.markdown
- settings
-
- foreground
- #ed8796
-
-
-
- scope
- markup.heading.2.markdown
- settings
-
- foreground
- #f5a97f
-
-
-
- scope
- markup.heading.markdown
- settings
-
- foreground
- #eed49f
-
-
-
-
-
\ No newline at end of file
diff --git a/nate-work/dotfiles/foot/foot.ini b/nate-work/dotfiles/foot/foot.ini
deleted file mode 100644
index 74cf9ac..0000000
--- a/nate-work/dotfiles/foot/foot.ini
+++ /dev/null
@@ -1,45 +0,0 @@
-[main]
-font=Hurmit Nerd Font Mono:size=12
-
-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
diff --git a/nate-work/dotfiles/ghostty/config b/nate-work/dotfiles/ghostty/config
deleted file mode 100644
index 517f906..0000000
--- a/nate-work/dotfiles/ghostty/config
+++ /dev/null
@@ -1,46 +0,0 @@
-theme = "catppuccin-macchiato.conf"
-
-###
-# Font config
-###
-
-font-size = 14
-font-family = "Monaspace Xenon Var"
-font-family-bold = "Monaspace Argon Var"
-font-family-italic = "Monaspace Radon Var"
-font-family-bold-italic = "Monaspace Krypton Var"
-
-font-variation = wght=400
-font-variation = wdth=100
-font-variation = slnt=-2
-
-font-variation-bold = wght=600
-font-variation-bold = wdth=100
-
-font-variation-italic = wght=400
-font-variation-italic = wdth=100
-font-variation-italic = slnt=-10
-
-font-variation-bold-italic = wght=700
-font-variation-bold-italic = wdth=100
-font-variation-bold-italic = slnt=-3
-
-# Liguratures
-font-feature = +ss01, +ss02, +ss03, +ss04, +ss05, +ss06, +ss07, +ss08, +ss09, +ss10
-# Enables texture healing
-font-feature = +calt
-font-feature = +liga
-
-###
-# Keybinds
-###
-
-keybind = ctrl+shift+plus=increase_font_size:1
-# keybind = ctrl+minus=decrease_font_size:1
-
-###
-# Misc
-###
-
-window-padding-x = 4
-window-padding-y = 4
diff --git a/nate-work/dotfiles/ghostty/themes/catppuccin-frappe.conf b/nate-work/dotfiles/ghostty/themes/catppuccin-frappe.conf
deleted file mode 100644
index 503b7a8..0000000
--- a/nate-work/dotfiles/ghostty/themes/catppuccin-frappe.conf
+++ /dev/null
@@ -1,22 +0,0 @@
-palette = 0=#51576d
-palette = 1=#e78284
-palette = 2=#a6d189
-palette = 3=#e5c890
-palette = 4=#8caaee
-palette = 5=#f4b8e4
-palette = 6=#81c8be
-palette = 7=#a5adce
-palette = 8=#626880
-palette = 9=#e78284
-palette = 10=#a6d189
-palette = 11=#e5c890
-palette = 12=#8caaee
-palette = 13=#f4b8e4
-palette = 14=#81c8be
-palette = 15=#b5bfe2
-background = 303446
-foreground = c6d0f5
-cursor-color = f2d5cf
-cursor-text = 232634
-selection-background = 44495d
-selection-foreground = c6d0f5
diff --git a/nate-work/dotfiles/ghostty/themes/catppuccin-latte.conf b/nate-work/dotfiles/ghostty/themes/catppuccin-latte.conf
deleted file mode 100644
index 884910d..0000000
--- a/nate-work/dotfiles/ghostty/themes/catppuccin-latte.conf
+++ /dev/null
@@ -1,22 +0,0 @@
-palette = 0=#5c5f77
-palette = 1=#d20f39
-palette = 2=#40a02b
-palette = 3=#df8e1d
-palette = 4=#1e66f5
-palette = 5=#ea76cb
-palette = 6=#179299
-palette = 7=#acb0be
-palette = 8=#6c6f85
-palette = 9=#d20f39
-palette = 10=#40a02b
-palette = 11=#df8e1d
-palette = 12=#1e66f5
-palette = 13=#ea76cb
-palette = 14=#179299
-palette = 15=#bcc0cc
-background = eff1f5
-foreground = 4c4f69
-cursor-color = dc8a78
-cursor-text = eff1f5
-selection-background = d8dae1
-selection-foreground = 4c4f69
diff --git a/nate-work/dotfiles/ghostty/themes/catppuccin-macchiato.conf b/nate-work/dotfiles/ghostty/themes/catppuccin-macchiato.conf
deleted file mode 100644
index b1eb033..0000000
--- a/nate-work/dotfiles/ghostty/themes/catppuccin-macchiato.conf
+++ /dev/null
@@ -1,22 +0,0 @@
-palette = 0=#494d64
-palette = 1=#ed8796
-palette = 2=#a6da95
-palette = 3=#eed49f
-palette = 4=#8aadf4
-palette = 5=#f5bde6
-palette = 6=#8bd5ca
-palette = 7=#a5adcb
-palette = 8=#5b6078
-palette = 9=#ed8796
-palette = 10=#a6da95
-palette = 11=#eed49f
-palette = 12=#8aadf4
-palette = 13=#f5bde6
-palette = 14=#8bd5ca
-palette = 15=#b8c0e0
-background = 24273a
-foreground = cad3f5
-cursor-color = f4dbd6
-cursor-text = 181926
-selection-background = 3a3e53
-selection-foreground = cad3f5
diff --git a/nate-work/dotfiles/ghostty/themes/catppuccin-mocha.conf b/nate-work/dotfiles/ghostty/themes/catppuccin-mocha.conf
deleted file mode 100644
index 57825be..0000000
--- a/nate-work/dotfiles/ghostty/themes/catppuccin-mocha.conf
+++ /dev/null
@@ -1,22 +0,0 @@
-palette = 0=#45475a
-palette = 1=#f38ba8
-palette = 2=#a6e3a1
-palette = 3=#f9e2af
-palette = 4=#89b4fa
-palette = 5=#f5c2e7
-palette = 6=#94e2d5
-palette = 7=#a6adc8
-palette = 8=#585b70
-palette = 9=#f38ba8
-palette = 10=#a6e3a1
-palette = 11=#f9e2af
-palette = 12=#89b4fa
-palette = 13=#f5c2e7
-palette = 14=#94e2d5
-palette = 15=#bac2de
-background = 1e1e2e
-foreground = cdd6f4
-cursor-color = f5e0dc
-cursor-text = 11111b
-selection-background = 353749
-selection-foreground = cdd6f4
diff --git a/nate-work/dotfiles/wofi/config b/nate-work/dotfiles/wofi/config
deleted file mode 100644
index a7f1910..0000000
--- a/nate-work/dotfiles/wofi/config
+++ /dev/null
@@ -1,17 +0,0 @@
-hide_scroll=true
-show=drun
-width=25%
-lines=10
-line_wrap=word
-term=xfce4-terminal
-allow_markup=true
-always_parse_args=true
-show_all=true
-print_command=true
-layer=overlay
-allow_images=true
-insensitive=true
-prompt=
-image_size=15
-display_generic=true
-location=center
diff --git a/nate-work/dotfiles/wofi/config.power b/nate-work/dotfiles/wofi/config.power
deleted file mode 100644
index 0ad9ecf..0000000
--- a/nate-work/dotfiles/wofi/config.power
+++ /dev/null
@@ -1,9 +0,0 @@
-hide_search=true
-hide_scroll=true
-insensitive=true
-show=dmenu
-width=100
-lines=4
-location=top_right
-x=-120
-y=10
diff --git a/nate-work/dotfiles/wofi/config.screenshot b/nate-work/dotfiles/wofi/config.screenshot
deleted file mode 100644
index d895aca..0000000
--- a/nate-work/dotfiles/wofi/config.screenshot
+++ /dev/null
@@ -1,9 +0,0 @@
-hide_scroll=true
-insensitive=true
-width=140
-height=200
-show=dmenu
-location=top_right
-x=-200
-y=60
-prompt="Screenshot"
diff --git a/nate-work/dotfiles/wofi/macc_style.css b/nate-work/dotfiles/wofi/macc_style.css
deleted file mode 100644
index fd9583b..0000000
--- a/nate-work/dotfiles/wofi/macc_style.css
+++ /dev/null
@@ -1,164 +0,0 @@
-@define-color rosewater #f4dbd6;
-@define-color rosewater-rgb rgb(244, 219, 214);
-@define-color flamingo #f0c6c6;
-@define-color flamingo-rgb rgb(240, 198, 198);
-@define-color pink #f5bde6;
-@define-color pink-rgb rgb(245, 189, 230);
-@define-color mauve #c6a0f6;
-@define-color mauve-rgb rgb(198, 160, 246);
-@define-color red #ed8796;
-@define-color red-rgb rgb(237, 135, 150);
-@define-color maroon #ee99a0;
-@define-color maroon-rgb rgb(238, 153, 160);
-@define-color peach #f5a97f;
-@define-color peach-rgb rgb(245, 169, 127);
-@define-color yellow #eed49f;
-@define-color yellow-rgb rgb(238, 212, 159);
-@define-color green #a6da95;
-@define-color green-rgb rgb(166, 218, 149);
-@define-color teal #8bd5ca;
-@define-color teal-rgb rgb(139, 213, 202);
-@define-color sky #91d7e3;
-@define-color sky-rgb rgb(145, 215, 227);
-@define-color sapphire #7dc4e4;
-@define-color sapphire-rgb rgb(125, 196, 228);
-@define-color blue #8aadf4;
-@define-color blue-rgb rgb(138, 173, 244);
-@define-color lavender #b7bdf8;
-@define-color lavender-rgb rgb(183, 189, 248);
-@define-color text #cad3f5;
-@define-color text-rgb rgb(202, 211, 245);
-@define-color subtext1 #b8c0e0;
-@define-color subtext1-rgb rgb(184, 192, 224);
-@define-color subtext0 #a5adcb;
-@define-color subtext0-rgb rgb(165, 173, 203);
-@define-color overlay2 #939ab7;
-@define-color overlay2-rgb rgb(147, 154, 183);
-@define-color overlay1 #8087a2;
-@define-color overlay1-rgb rgb(128, 135, 162);
-@define-color overlay0 #6e738d;
-@define-color overlay0-rgb rgb(110, 115, 141);
-@define-color surface2 #5b6078;
-@define-color surface2-rgb rgb(91, 96, 120);
-@define-color surface1 #494d64;
-@define-color surface1-rgb rgb(73, 77, 100);
-@define-color surface0 #363a4f;
-@define-color surface0-rgb rgb(54, 58, 79);
-@define-color base #24273a;
-@define-color base-rgb rgb(36, 39, 58);
-@define-color mantle #1e2030;
-@define-color mantle-rgb rgb(30, 32, 48);
-@define-color crust #181926;
-@define-color crust-rgb rgb(24, 25, 38);
-
-* {
- font-family: 'Overpass Nerd Font', monospace;
- font-size: 18px;
-}
-
-/* Window */
-window {
- margin: 0px;
- padding: 10px;
- border: 0.16em solid @lavender;
- border-radius: 0.7em;
- background-color: @base;
- animation: slideIn 0.5s ease-in-out both;
-}
-
-/* Slide In */
-@keyframes slideIn {
- 0% {
- opacity: 0;
- }
-
- 100% {
- opacity: 1;
- }
-}
-
-/* Inner Box */
-#inner-box {
- margin: 5px;
- padding: 0px;
- border: none;
- background-color: @base;
- animation: fadeIn 0.5s ease-in-out both;
-}
-
-/* Fade In */
-@keyframes fadeIn {
- 0% {
- opacity: 0;
- }
-
- 100% {
- opacity: 1;
- }
-}
-
-/* Outer Box */
-#outer-box {
- margin: 5px;
- padding: 10px;
- border: none;
- background-color: @base;
-}
-
-/* Scroll */
-#scroll {
- margin: 0px;
- padding: 10px;
- border: none;
- background-color: @base;
-}
-
-/* Input */
-#input {
- margin: 0px 20px;
- padding: 10px;
- border: none;
- border-radius: 0.1em;
- color: @text;
- background-color: @base;
- animation: fadeIn 0.5s ease-in-out both;
-}
-
-#input image {
- border: none;
- color: @red;
-}
-
-#input * {
- outline: 4px solid @red;
-}
-
-/* Text */
-#text {
- margin: 5px;
- border: none;
- color: @text;
- animation: fadeIn 0.5s ease-in-out both;
-}
-
-#entry {
- background-color: @base;
-}
-
-#entry arrow {
- border: none;
- color: @lavender;
-}
-
-/* Selected Entry */
-#entry:selected {
- border: 0.11em solid @lavender;
-}
-
-#entry:selected #text {
- color: @mauve;
-}
-
-#entry:drop(active) {
- background-color: @lavender;
-}
\ No newline at end of file
diff --git a/nate-work/dotfiles/wofi/style.css b/nate-work/dotfiles/wofi/style.css
deleted file mode 100644
index 146e5a6..0000000
--- a/nate-work/dotfiles/wofi/style.css
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
-Nordic Color Scheme
-*/
-
-@define-color nord2 #434c5e;
-@define-color nord3 #4c566a;
-@define-color nord4 #d8dee9;
-@define-color nord8 #88c0d0;
-@define-color nord_cyan #8fbcbb;
-@define-color nord_orange #d08770;
-@define-color nord_red #bf616a;
-@define-color nord_green #a3be8c;
-@define-color nord_yellow #ebcb8b;
-@define-color nord_purple #b48ead;
-
-
-*{
- font-family: Overpass Nerd Font;
- font-size: 16;
-}
-
-window {
- border-radius: 10px;
- border: 2px solid @nord_purple;
- padding: 5px;
-}
-
-#input {
- margin-bottom: 15px;
- padding:6px;
- border-radius: 20px;
- border:none;
- color: @nord4;
- font-family: Overpass Nerd Font 18;
-}
-
-#inner-box {
- border-radius: 10px;
- background-color: @nord3;
-}
-
-#outer-box {
- border-radius: 10px;
- margin: 5px;
- padding:15px;
- background-color: @nord2;
-}
-
-#text {
- padding: 5px;
- color: @nord4;
-}
-
-#entry:nth-child(even) {
- background-color: @nord2;
-}
-
-#entry:selected {
- color: @nord_cyan;
- background-color: @nord_cyan;
-}
-
-#text:selected {
- color: @nord_2;
- background-color: @nord_cyan;
-}
-
-#scroll {
- margin: -2px 0px;
-}
diff --git a/nate-work/dotfiles/wofi/style.widgets.css b/nate-work/dotfiles/wofi/style.widgets.css
deleted file mode 100644
index 7718255..0000000
--- a/nate-work/dotfiles/wofi/style.widgets.css
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
-Arc-Dark Color Scheme
-*/
-
-@define-color highlight #5294e2;
-@define-color base1 #404552;
-@define-color base2 #40455;
-@define-color base3 #4b5160;
-
-*{
- font-family: UbuntuMono;
-}
-
-#window {
- border: 1px solid @highlight;
- margin: 0px 5px 0px 5px;
-}
-
-#inner-box {
- background-color: @base2;
-}
-
-#outer-box {
- margin: 5px;
- padding:10px;
- background-color: @base2;
- margin-top: -22px;
-}
-
-#text {
- padding: 5px;
- color: white;
-}
-
-#entry:nth-child(even) {
- background-color: @base1;
-}
-
-#entry {
- background-color: @base3;
-}
-
-#entry:selected {
- background-color: @highlight;
-}
diff --git a/nate-work/dotfiles/wofi/windows.py b/nate-work/dotfiles/wofi/windows.py
deleted file mode 100755
index 6b41a60..0000000
--- a/nate-work/dotfiles/wofi/windows.py
+++ /dev/null
@@ -1,119 +0,0 @@
-#!/bin/python3
-import json
-import subprocess
-from argparse import ArgumentParser
-
-ENTER = "\n"
-
-
-def get_windows():
-
- command = "swaymsg -t get_tree"
- process = subprocess.Popen(
- command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE
- )
-
- process = subprocess.Popen(
- command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE
- )
- data = json.loads(process.communicate()[0])
-
- # Select outputs that are active
- windows = []
- for output in data["nodes"]:
-
- # The scratchpad (under __i3) is not supported
- if output.get("name") != "__i3" and output.get("type") == "output":
- workspaces = output.get("nodes", [])
- for ws in workspaces:
- if ws.get("type") == "workspace":
- windows.extend(extract_nodes_iterative(ws))
- return windows
-
-
-# Extracts all windows from a sway workspace json object
-def extract_nodes_iterative(workspace):
- all_nodes = []
-
- floating_nodes = workspace.get("floating_nodes", [])
-
- for floating_node in floating_nodes:
- all_nodes.append(floating_node)
-
- nodes = workspace.get("nodes", [])
-
- for node in nodes:
-
- # Leaf node
- if not node.get("nodes"):
- all_nodes.append(node)
- # Nested node, handled iterative
- else:
- for inner_node in node.get("nodes"):
- nodes.append(inner_node)
-
- return all_nodes
-
-
-# Returns an array of all windows
-def parse_windows(windows):
- return [window.get("name") for window in windows]
-
-
-# Returns a newline seperated UFT-8 encoded string of all windows for wofi
-def build_wofi_string(windows):
- return ENTER.join(windows).encode("UTF-8")
-
-
-# Executes wofi with the given input string
-def show_wofi(windows):
-
- command = 'wofi -c ~/.config/wofi/menu -s ~/.config/wofi/style.css -p "Windows: " -d -i --hide-scroll'
-
- process = subprocess.Popen(
- command, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE
- )
- return process.communicate(input=windows)[0]
-
-
-# Returns the sway window id of the window that was selected by the user inside wofi
-def parse_id(windows, parsed_windows, selected):
- if not selected:
- return None
- else:
- selected = (selected.decode("UTF-8"))[:-1] # Remove new line character
- window_index = int(
- parsed_windows.index(selected)
- ) # Get index of selected window in the parsed window array
- return str(
- windows[window_index].get("id")
- ) # Get sway window id based on the index
-
-
-# Switches the focus to the given id
-def switch_window(id):
- command = "swaymsg [con_id={}] focus".format(id)
-
- process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE)
- process.communicate()[0]
-
-
-# Entry point
-if __name__ == "__main__":
-
- parser = ArgumentParser(description="Wofi based window switcher")
-
- windows = get_windows()
-
- parsed_windows = parse_windows(windows)
-
- wofi_string = build_wofi_string(parsed_windows)
-
- selected = show_wofi(wofi_string)
-
- # Otherwise no point in running
- if selected:
-
- selected_id = parse_id(windows, parsed_windows, selected)
-
- switch_window(selected_id)
diff --git a/nate-work/linked-dotfiles/waybar/config b/nate-work/linked-dotfiles/waybar/config
deleted file mode 100644
index cb183fd..0000000
--- a/nate-work/linked-dotfiles/waybar/config
+++ /dev/null
@@ -1,338 +0,0 @@
-// Global
-{
- // "mode": "hide",
- "layer": "top",
- "position": "top",
- "margin-top": 3,
- "margin-left": 3,
- "margin-right": 3,
- "margin-bottom": 3,
-
- // If height property would be not present, it'd be calculated dynamically
- // "height": 60,
-
- "modules-left": [
- "custom/launcher",
- "hyprland/workspaces",
- "hyprland/window",
- ],
-
- "modules-center": [
- // "custom/signal",
- // "custom/steam",
- // "custom/spotify",
- // "custom/firefox",
- "custom/slack",
- "custom/files",
- "custom/vpn",
- ],
-
- "modules-right": [
- "clock",
- // "network", // using network applet in tray
- // "idle_inhibitor",
- "custom/storage",
- "memory",
- "cpu",
- "pulseaudio",
- "custom/keyboard-layout",
- "battery",
- "backlight",
- // "custom/neewer",
- "tray",
- //"custom/weather",
- "custom/power",
- ],
-
- // Modules
-
- "idle_inhibitor": {
- "format": "{icon} ",
- "format-icons":{
- "activated": "",
- "deactivated": ""
- }
- },
-
- "battery": {
- "states": {
- // "good": 95,
- "warning": 30,
- "critical": 15
- },
- "format": "{icon} {capacity}%",
- "format-charging": "{capacity}% ",
- "format-plugged": "{capacity}% ",
- // "format-good": "", // An empty format will hide the module
- // "format-full": "",
- "format-icons": ["", "", "", "", ""]
- },
-
- "clock": {
- "interval": 1,
- // "format-alt": " {:%e %b %Y}", // Icon: calendar-alt
- "format": "{:%I:%M.%S %p}",
- "tooltip-format": "{:%e %B %Y}"
- },
-
- "cpu": {
- "interval": 5,
- "format": " {usage}%", // Icon: microchip
- "states": {
- "warning": 70,
- "critical": 90,
- },
- "on-click": "ghostty -e 'htop'",
- },
-
- "memory": {
- "interval": 5,
- "format": " {}%", // Icon: memory
- "on-click": "ghostty -e 'htop'",
- "states": {
- "warning": 70,
- "critical": 90
- }
- },
-
- "network": {
- "interval": 5,
- "format-wifi": "", // Icon: wifi
- "format-ethernet": " {ifname}: {ipaddr}/{cidr}", // Icon: ethernet
- "format-disconnected": "⚠ Disconnected",
- "tooltip-format": "{essid} - {ifname}:{ipaddr} {bandwidthUpBytes} {bandwidthDownBytes}",
- "on-click": "ghostty -e 'nmtui'",
- },
- "network#vpn": {
- "interface": "tun0",
- "format": " {signalStrength}%",
- "format-disconnected": "⚠ Disconnected",
- "tooltip-format": "{essid} - {ifname}:{ipaddr} {bandwidthUpBytes} {bandwidthDownBytes}",
- },
-
- "hyprland/window": {
- "format": "{}",
- "max-length": 60,
- "icon": true,
- "icon_size": 30,
- "rewrite": {
- // Firefox
- "(.*) — Mozilla Firefox": " $1",
- "(.*) - Mozilla Firefox": " $1",
- "Mozilla Firefox": " Firefox",
-
- // Chrome/Chromium
- "(.*) - Google Chrome": " $1",
- "(.*) - Chromium": " $1",
- "Google Chrome": " Chrome",
- "Chromium": " Chromium",
-
- // Terminal applications
- "(.*) - zsh": " $1",
- "(.*) - bash": " $1",
- "(.*) - fish": " $1",
- "ghostty": " Terminal",
- "kitty": " Terminal",
- "alacritty": " Terminal",
- "ghostty": " Terminal",
-
- // Text editors and IDEs
- "(.*) - Visual Studio Code": " $1",
- "(.*) - Code": " $1",
- "(.*) - Vim": " $1",
- "(.*) - Neovim": " $1",
- "(.*) - Emacs": " $1",
- "Visual Studio Code": " VS Code",
-
- // File managers
- "(.*)Nautilus": " Files: $1",
- "Files": " Files",
- "Thunar": " Files",
- "Dolphin": " Files",
-
- // Communication apps
- "Slack (.*)": " $1",
- "Slack": " Slack",
- "Signal": " Signal",
- "Discord": " Discord",
- "Telegram": " Telegram",
-
- // Media and entertainment
- "Spotify": " Spotify",
- "Steam": " Steam",
- "(.*) - YouTube": " $1",
- "VLC media player": " VLC",
-
- // Development tools
- "(.*) - GitHub": " $1",
- "GitKraken": " GitKraken",
- "Postman": " Postman",
-
- // System applications
- "System Monitor": " System Monitor",
- "Task Manager": " Task Manager",
- "Settings": " Settings",
- "Control Panel": " Settings",
-
- // Office applications
- "(.*) - LibreOffice Writer": " $1",
- "(.*) - LibreOffice Calc": " $1",
- "(.*) - LibreOffice Impress": " $1",
-
- // Remove common suffixes that don't add value
- "^(.*) - .*$": "$1",
- "^(.*) | .*$": "$1",
-
- // Fallback for empty/unnamed windows
- "^$": "Desktop"
- }
- },
-
- "hyprland/workspaces": {
- "disable-scroll": true,
- "disable-markup" : false,
- "all-outputs": true,
- "show-special": true,
- "special-visible-only": true,
- "format": " {icon} ",
- "format-icons": {
- "1": "",
- "2": "",
- "3": "",
- "4": "",
- "5": " 5",
- "6": " 6",
- "7": " 7",
- "8": " 8",
- "9": " 9",
- "music": "",
- "scratch": "",
- }
- },
-
- "pulseaudio": {
- "scroll-step": 1, // %, can be a float
- "format": "{icon} {volume}%",
- "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%",
- },
-
- // "custom/temp": {
- // "exec": "notify-send \"temp thing\"",
- // "interval": "once",
- // "signal": 8,
- // },
-
- "tray": {
- "icon-size": 20,
- "spacing":10,
- },
-
- "backlight": {
- "format": "{icon} {percent}%",
- "format-icons": ["", "", "", "", "", ""],
- "on-scroll-down": "brightnessctl -c backlight set 1%-",
- "on-scroll-up": "brightnessctl -c backlight set +1%",
- "min-brightness": 1
- },
-
- // Add this configuration block
- "custom/neewer": {
- "format": "{}",
- "return-type": "json",
- "exec": "~/nixos/nate-work/dotfiles/waybar/scripts/waybar-neewer.sh status",
- "interval": 10,
- "on-click-middle": "~/nixos/nate-work/dotfiles/waybar/scripts/waybar-neewer.sh toggle",
- "on-click": "~/nixos/nate-work/dotfiles/waybar/scripts/waybar-neewer.sh decrease",
- "on-click-right": "~/nixos/nate-work/dotfiles/waybar/scripts/waybar-neewer.sh increase",
- "tooltip": true
- },
-
- "custom/storage": {
- "format": "{icon} {percentage}%",
- "format-icons": {
- "default": "",
- "warning": "",
- "critical": "",
- },
- "exec": "usage=$(df / --output=pcent | tail -n1 | tr -d ' %'); if [ $usage -ge 90 ]; then class=\"critical\"; elif [ $usage -ge 75 ]; then class=\"warning\"; else class=\"default\"; fi; echo \"{\\\"percentage\\\":$usage,\\\"class\\\":\\\"$class\\\"}\"",
- "return-type": "json",
- "interval": 30,
- "tooltip-format": "Root filesystem: {percentage}% used",
- },
-
- "custom/signal": {
- "format": " ",
- "on-click": "exec signal",
- "tooltip": false,
- },
-
- "custom/steam": {
- "format": " ",
- "on-click": "exec steam",
- "tooltip": false,
- },
-
- "custom/spotify": {
- "format": " ",
- "on-click": "exec flatpak run com.spotify.Client",
- "tooltip": false,
- },
-
- "custom/firefox": {
- "format": " ",
- "on-click": "exec firefox",
- "tooltip": false,
- },
-
-
- "custom/slack": {
- "format": " ",
- "on-click": "slack",
- "tooltip": false,
- "exec if": "pgrep slack"
- },
-
-
- "custom/files": {
- "format": " ",
- "on-click": "exec nautilus",
- "tooltip": false,
- },
-
- "custom/vpn": {
- "format": "{}",
- "return-type": "json",
- "exec": "~/.config/waybar/scripts/waybar-vpn.sh status",
- "interval": 5,
- "on-click": "~/.config/waybar/scripts/waybar-vpn.sh toggle",
- "tooltip": true
- },
-
- "custom/launcher": {
- "format":" ",
- "on-click": "exec wofi -c ~/.config/wofi/config -I",
- "tooltip": false,
- },
-
- "custom/power": {
- "format":"⏻",
- "on-click": "exec ~/.config/waybar/scripts/power-menu.sh",
- "tooltip": false,
- },
-}
diff --git a/nate-work/linked-dotfiles/waybar/scripts/keyboard_layout.sh b/nate-work/linked-dotfiles/waybar/scripts/keyboard_layout.sh
deleted file mode 100755
index 04cf5e1..0000000
--- a/nate-work/linked-dotfiles/waybar/scripts/keyboard_layout.sh
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/usr/bin/env bash
-
-entries="Default Colemak"
-
-selected=$(printf '%s\n' $entries | wofi --conf=$HOME/.config/wofi/config.power --style=$HOME/.config/wofi/style.widgets.css | awk '{print tolower($1)}')
-
-case $selected in
- default)
- swaymsg input type:keyboard xkb_layout "us"
- swaymsg input type:keyboard xkb_variant '""'
- ;;
- colemak)
- swaymsg input type:keyboard xkb_layout "us"
- swaymsg input type:keyboard xkb_variant "colemak_dh"
- ;;
-esac
diff --git a/nate-work/linked-dotfiles/waybar/scripts/neweer_light.py b/nate-work/linked-dotfiles/waybar/scripts/neweer_light.py
deleted file mode 100755
index 3dca6e7..0000000
--- a/nate-work/linked-dotfiles/waybar/scripts/neweer_light.py
+++ /dev/null
@@ -1,231 +0,0 @@
-#!/usr/bin/env python3
-"""
-NEEWER FS230B LED Light Control SDK
-Based on reverse-engineered protocol from similar NEEWER models
-"""
-
-import asyncio
-import struct
-from bleak import BleakClient, BleakScanner
-from typing import Optional, List, Tuple
-import logging
-
-# NEEWER BLE Service/Characteristic UUIDs (based on RGB660 PRO reverse engineering)
-SERVICE_UUID = "69400001-b5a3-f393-e0a9-e50e-24dc-ca99"
-CHARACTERISTIC_UUID = "69400002-b5a3-f393-e0a9-e50e-24dc-ca99"
-
-class NeewerFS230B:
- """Control class for NEEWER FS230B LED Light"""
-
- def __init__(self, mac_address: str = None):
- """
- Initialize the NEEWER light controller
-
- Args:
- mac_address: Bluetooth MAC address of the light. If None, will scan for devices.
- """
- self.mac_address = mac_address
- self.client = None
- self.is_connected = False
- self.logger = logging.getLogger(__name__)
-
- async def scan_for_devices(self, timeout: int = 10) -> List[Tuple[str, str]]:
- """
- Scan for NEEWER devices
-
- Returns:
- List of tuples containing (mac_address, device_name)
- """
- devices = []
- scanner = BleakScanner()
-
- self.logger.info(f"Scanning for NEEWER devices for {timeout} seconds...")
- discovered_devices = await scanner.discover(timeout=timeout)
-
- for device in discovered_devices:
- # Look for NEEWER devices by name patterns
- if device.name and any(keyword in device.name.upper() for keyword in
- ["NEEWER", "FS230", "NW"]):
- devices.append((device.address, device.name))
- self.logger.info(f"Found NEEWER device: {device.name} ({device.address})")
-
- return devices
-
- async def connect(self) -> bool:
- """
- Connect to the NEEWER light
-
- Returns:
- True if connected successfully, False otherwise
- """
- if not self.mac_address:
- devices = await self.scan_for_devices()
- if not devices:
- self.logger.error("No NEEWER devices found")
- return False
- self.mac_address = devices[0][0]
- self.logger.info(f"Using first found device: {self.mac_address}")
-
- try:
- self.client = BleakClient(self.mac_address)
- await self.client.connect()
- self.is_connected = True
- self.logger.info(f"Connected to NEEWER light at {self.mac_address}")
- return True
- except Exception as e:
- self.logger.error(f"Failed to connect: {e}")
- return False
-
- async def disconnect(self):
- """Disconnect from the light"""
- if self.client and self.is_connected:
- await self.client.disconnect()
- self.is_connected = False
- self.logger.info("Disconnected from NEEWER light")
-
- def _calculate_checksum(self, data: List[int]) -> int:
- """Calculate checksum for command (sum truncated to last byte)"""
- return sum(data) & 0xFF
-
- async def _send_command(self, command: List[int]) -> bool:
- """
- Send a command to the light
-
- Args:
- command: List of integers representing the command bytes
-
- Returns:
- True if command sent successfully
- """
- if not self.is_connected or not self.client:
- self.logger.error("Not connected to device")
- return False
-
- try:
- # Add checksum to command
- checksum = self._calculate_checksum(command)
- full_command = command + [checksum]
-
- # Convert to bytes
- command_bytes = bytes(full_command)
-
- self.logger.debug(f"Sending command: {command_bytes.hex()}")
- await self.client.write_gatt_char(CHARACTERISTIC_UUID, command_bytes)
- return True
- except Exception as e:
- self.logger.error(f"Failed to send command: {e}")
- return False
-
- async def set_power(self, on: bool) -> bool:
- """
- Turn the light on or off
-
- Args:
- on: True to turn on, False to turn off
-
- Returns:
- True if command sent successfully
- """
- # Power command format: [0x78, 0x81, 0x01, on_off_byte]
- # On = 0x01, Off = 0x02
- command = [0x78, 0x81, 0x01, 0x01 if on else 0x02]
- return await self._send_command(command)
-
- async def set_brightness_and_temperature(self, brightness: int, temperature: int) -> bool:
- """
- Set brightness and color temperature
-
- Args:
- brightness: 0-100 (percentage)
- temperature: 3200-5600 (Kelvin) for bi-color models
-
- Returns:
- True if command sent successfully
- """
- # Validate inputs
- brightness = max(0, min(100, brightness))
- temperature = max(3200, min(5600, temperature))
-
- # Convert temperature to protocol value (3200K = 0x20, 5600K = 0x38)
- temp_value = int(((temperature - 3200) / (5600 - 3200)) * (0x38 - 0x20) + 0x20)
-
- # CCT command format: [0x78, 0x87, 0x02, brightness, temp_value]
- command = [0x78, 0x87, 0x02, brightness, temp_value]
- return await self._send_command(command)
-
- async def set_brightness(self, brightness: int) -> bool:
- """
- Set brightness only (maintains current color temperature)
-
- Args:
- brightness: 0-100 (percentage)
-
- Returns:
- True if command sent successfully
- """
- # Default to 5600K (daylight) if no temperature specified
- return await self.set_brightness_and_temperature(brightness, 5600)
-
-
-# CLI Interface
-async def main():
- """Simple CLI for testing the SDK"""
- import argparse
-
- parser = argparse.ArgumentParser(description="Control NEEWER FS230B LED Light")
- parser.add_argument("--mac", help="Bluetooth MAC address of the light")
- parser.add_argument("--scan", action="store_true", help="Scan for NEEWER devices")
- parser.add_argument("--on", action="store_true", help="Turn light on")
- parser.add_argument("--off", action="store_true", help="Turn light off")
- parser.add_argument("--brightness", type=int, help="Set brightness (0-100)")
- parser.add_argument("--temperature", type=int, help="Set color temperature (3200-5600K)")
- parser.add_argument("--verbose", "-v", action="store_true", help="Enable verbose logging")
-
- args = parser.parse_args()
-
- if args.verbose:
- logging.basicConfig(level=logging.DEBUG)
- else:
- logging.basicConfig(level=logging.INFO)
-
- light = NeewerFS230B(args.mac)
-
- if args.scan:
- devices = await light.scan_for_devices()
- if devices:
- print("Found NEEWER devices:")
- for mac, name in devices:
- print(f" {name}: {mac}")
- else:
- print("No NEEWER devices found")
- return
-
- # Connect to the light
- if not await light.connect():
- print("Failed to connect to light")
- return
-
- try:
- # Execute commands
- if args.on:
- success = await light.set_power(True)
- print(f"Turn on: {'Success' if success else 'Failed'}")
-
- if args.off:
- success = await light.set_power(False)
- print(f"Turn off: {'Success' if success else 'Failed'}")
-
- if args.brightness is not None:
- if args.temperature:
- success = await light.set_brightness_and_temperature(args.brightness, args.temperature)
- print(f"Set brightness {args.brightness}% and temperature {args.temperature}K: {'Success' if success else 'Failed'}")
- else:
- success = await light.set_brightness(args.brightness)
- print(f"Set brightness {args.brightness}%: {'Success' if success else 'Failed'}")
-
- finally:
- await light.disconnect()
-
-
-if __name__ == "__main__":
- asyncio.run(main())
diff --git a/nate-work/linked-dotfiles/waybar/scripts/power-menu.sh b/nate-work/linked-dotfiles/waybar/scripts/power-menu.sh
deleted file mode 100755
index 39ff617..0000000
--- a/nate-work/linked-dotfiles/waybar/scripts/power-menu.sh
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/usr/bin/env bash
-
-entries="Lock Suspend Reboot Shutdown"
-
-selected=$(printf '%s\n' $entries | wofi --conf=$HOME/.config/wofi/config.power --style=$HOME/.config/wofi/style.widgets.css | awk '{print tolower($1)}')
-
-case $selected in
- lock)
- swaylock;;
- suspend)
- exec systemctl suspend;;
- reboot)
- exec systemctl reboot;;
- shutdown)
- exec systemctl poweroff -i;;
-esac
diff --git a/nate-work/linked-dotfiles/waybar/scripts/vpn.sh b/nate-work/linked-dotfiles/waybar/scripts/vpn.sh
deleted file mode 100755
index 411615e..0000000
--- a/nate-work/linked-dotfiles/waybar/scripts/vpn.sh
+++ /dev/null
@@ -1,68 +0,0 @@
-#!/usr/bin/env bash
-# vpn-proxy-toggle.sh
-
-VM_USER="nate"
-VM_IP="192.168.122.241"
-SOCKS_PORT=1080
-PID_FILE="/tmp/vpn-socks.pid"
-
-start_proxy() {
- # Check if already running
- if pgrep -f "ssh -D $SOCKS_PORT" > /dev/null; then
- echo "Proxy already running"
- return 1
- fi
-
- ssh -D $SOCKS_PORT -f -N $VM_USER@$VM_IP
-
- # Get the PID of the SSH process we just started
- sleep 0.5
- pgrep -f "ssh -D $SOCKS_PORT" > "$PID_FILE"
-
- # Configure system proxy
- gsettings set org.gnome.system.proxy mode 'manual'
- gsettings set org.gnome.system.proxy.socks host 'localhost'
- gsettings set org.gnome.system.proxy.socks port $SOCKS_PORT
-
- echo "VPN proxy started on localhost:$SOCKS_PORT"
-}
-
-stop_proxy() {
- if ! pgrep -f "ssh -D $SOCKS_PORT" > /dev/null; then
- echo "Proxy not running"
- return 1
- fi
-
- # Find and kill SSH process
- pkill -f "ssh -D $SOCKS_PORT"
- rm -f "$PID_FILE"
-
- # Disable system proxy
- gsettings set org.gnome.system.proxy mode 'none'
-
- echo "VPN proxy stopped"
-}
-
-case "$1" in
- start)
- start_proxy
- ;;
- stop)
- stop_proxy
- ;;
- restart)
- stop_proxy
- start_proxy
- ;;
- status)
- if pgrep -f "ssh -D $SOCKS_PORT" > /dev/null; then
- echo "Proxy running on localhost:$SOCKS_PORT"
- else
- echo "Proxy not running"
- fi
- ;;
- *)
- echo "Usage: $0 {start|stop|restart|status}"
- exit 1
- ;;
-esac
diff --git a/nate-work/linked-dotfiles/waybar/scripts/waybar-neewer.sh b/nate-work/linked-dotfiles/waybar/scripts/waybar-neewer.sh
deleted file mode 100755
index 03bf2b5..0000000
--- a/nate-work/linked-dotfiles/waybar/scripts/waybar-neewer.sh
+++ /dev/null
@@ -1,99 +0,0 @@
-#!/usr/bin/env bash
-
-NEEWER_SDK_PATH="./nate-work/dotfiles/waybar/scripts/neweer_light.py"
-NEEWER_MAC="CB:33:40:DF:63:44"
-STATE_FILE="$HOME/.cache/neewer_light_state"
-BRIGHTNESS_FILE="$HOME/.cache/neewer_brightness"
-
-# Function to get current brightness from cache
-get_brightness() {
- if [ -f "$BRIGHTNESS_FILE" ]; then
- cat "$BRIGHTNESS_FILE"
- else
- echo "20" # Default brightness
- fi
-}
-
-# Function to save brightness to cache
-save_brightness() {
- echo "$1" > "$BRIGHTNESS_FILE"
-}
-
-# Function to get current power state
-get_power_state() {
- if [ -f "$STATE_FILE" ]; then
- cat "$STATE_FILE"
- else
- echo "off" # Default state
- fi
-}
-
-# Function to save power state
-save_power_state() {
- echo "$1" > "$STATE_FILE"
-}
-
-# Function to execute neewer command
-execute_neewer() {
- local cmd="$1"
- if [ -n "$NEEWER_MAC" ]; then
- python3 "$NEEWER_SDK_PATH" --mac "$NEEWER_MAC" $cmd
- else
- python3 "$NEEWER_SDK_PATH" $cmd
- fi
-}
-
-# Main function for waybar output
-waybar_output() {
- local state=$(get_power_state)
- local brightness=$(get_brightness)
-
- if [ "$state" = "on" ]; then
- echo "{\"text\":\" ${brightness}%\",\"class\":\"on\",\"tooltip\":\"NEEWER Light: ON (${brightness}%)\"}"
- else
- echo "{\"text\":\" OFF\",\"class\":\"off\",\"tooltip\":\"NEEWER Light: OFF\"}"
- fi
-}
-
-# Handle different commands
-case "$1" in
- "toggle")
- state=$(get_power_state)
- if [ "$state" = "on" ]; then
- execute_neewer "--off" && save_power_state "off"
- else
- execute_neewer "--on" && save_power_state "on"
- fi
- ;;
- "on")
- execute_neewer "--on" && save_power_state "on"
- ;;
- "off")
- execute_neewer "--off" && save_power_state "off"
- ;;
- "brightness")
- if [ -n "$2" ]; then
- brightness="$2"
- execute_neewer "--brightness $brightness" && save_brightness "$brightness"
- fi
- ;;
- "increase")
- current=$(get_brightness)
- new_brightness=$((current + 10))
- if [ $new_brightness -gt 100 ]; then
- new_brightness=100
- fi
- execute_neewer "--brightness $new_brightness" && save_brightness "$new_brightness"
- ;;
- "decrease")
- current=$(get_brightness)
- new_brightness=$((current - 10))
- if [ $new_brightness -lt 0 ]; then
- new_brightness=0
- fi
- execute_neewer "--brightness $new_brightness" && save_brightness "$new_brightness"
- ;;
- "status"|*)
- waybar_output
- ;;
-esac
diff --git a/nate-work/linked-dotfiles/waybar/scripts/waybar-vpn.sh b/nate-work/linked-dotfiles/waybar/scripts/waybar-vpn.sh
deleted file mode 100755
index c9fc33a..0000000
--- a/nate-work/linked-dotfiles/waybar/scripts/waybar-vpn.sh
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/env bash
-
-PID_FILE="/tmp/vpn-socks.pid"
-VPN_SCRIPT="$HOME/.config/waybar/scripts/vpn.sh"
-
-get_status() {
- if pgrep -f "ssh -D 1080" > /dev/null 2>&1; then
- echo '{"text": " ", "class": "connected", "tooltip": "VPN Connected (Click to disconnect)"}'
- else
- echo '{"text": " ", "class": "disconnected", "tooltip": "VPN Disconnected (Click to connect)"}'
- fi
-}
-
-toggle() {
- if pgrep -f "ssh -D 1080" > /dev/null 2>&1; then
- "$VPN_SCRIPT" stop
- else
- "$VPN_SCRIPT" start
- fi
-}
-
-case "$1" in
- status)
- get_status
- ;;
- toggle)
- toggle
- ;;
- *)
- get_status
- ;;
-esac
diff --git a/nate-work/linked-dotfiles/waybar/style.css b/nate-work/linked-dotfiles/waybar/style.css
deleted file mode 100644
index 1c22b4c..0000000
--- a/nate-work/linked-dotfiles/waybar/style.css
+++ /dev/null
@@ -1,345 +0,0 @@
-/* =============================================================================
- *
- * Waybar configuration
- *
- * Configuration reference: https://github.com/Alexays/Waybar/wiki/Configuration
- *
- * =========================================================================== */
-
-@define-color rosewater #f4dbd6;
-@define-color flamingo #f0c6c6;
-@define-color pink #f5bde6;
-@define-color mauve #c6a0f6;
-@define-color red #ed8796;
-@define-color maroon #ee99a0;
-@define-color peach #f5a97f;
-@define-color yellow #eed49f;
-@define-color green #a6da95;
-@define-color teal #8bd5ca;
-@define-color sky #91d7e3;
-@define-color sapphire #7dc4e4;
-@define-color blue #8aadf4;
-@define-color lavender #b7bdf8;
-@define-color text #cad3f5;
-@define-color subtext1 #b8c0e0;
-@define-color subtext0 #a5adcb;
-@define-color overlay2 #939ab7;
-@define-color overlay1 #8087a2;
-@define-color overlay0 #6e738d;
-@define-color surface2 #5b6078;
-@define-color surface1 #494d64;
-@define-color surface0 #363a4f;
-@define-color base #24273a;
-@define-color mantle #1e2030;
-@define-color crust #181926;
-
-
-/* -----------------------------------------------------------------------------
- * Keyframes
- * -------------------------------------------------------------------------- */
-@keyframes blink-warning {
- 70% {
- color: @overlay0;
- }
-
- to {
- color: @overlay0;
- background-color: @crust;
- }
-}
-
-@keyframes blink-critical {
- 70% {
- color: @overlay2;
- }
-
- to {
- color: @overlay2;
- background-color: @base;
- }
-}
-
-
-/* -----------------------------------------------------------------------------
- * Base styles
- * -------------------------------------------------------------------------- */
-/* Reset all styles */
-* {
- border: none;
- border-radius: 0;
- min-height: 40px;
- margin: 0px;
- padding: 0px;
-}
-
-/* The whole bar */
-#waybar {
- background: transparent;
- background-color: transparent;
- font-family: Overpass Nerd Font;
- font-size: 22px;
- color: @text;
-}
-
-#taskbar {
- background: transparent;
-}
-
-#taskbar button {
- padding-left: 3px;
- padding-right: 3px;
- margin-left: 3px;
- margin-right: 3px;
- /* color: transparent; */
- border-bottom: 2px solid;
-}
-
-#taskbar button.active {
- color: @green;
-}
-
-.modules-left,
-.modules-right,
-.modules-center {
- /* margin: 8px 8px 1px 8px; */
- background: transparent;
- /* color: @; */
- background-color: @base;
- border-radius: 25px;
- padding: 0px 10px 0px 10px;
- border-style: solid;
- border-width: 3px;
- border-color: @surface0;
-}
-
-/* Add gaps for middle module so they space out and dont touch */
-.modules-center {
- margin: 0px 100px;
-}
-
-/* Every modules */
-#backlight,
-#battery,
-#clock,
-#cpu,
-#custom-storage,
-#custom-keyboard-layout,
-#custom-PBPbattery,
-#custom-weather,
-#idle_inhibitor,
-#memory,
-#mode,
-#network,
-#pulseaudio,
-#temperature,
-#tray {
- padding: 0.5rem 0.6rem;
- margin: 1px 0px;
-}
-
-#clock {
- margin-left: 5px;
- margin-right: 5px;
- min-width: 140px;
-}
-
-#backlight,
-#battery,
-#cpu,
-#custom-storage,
-#memory,
-#network,
-#pulseaudio,
-#temperature {
- min-width: 90px;
-}
-
-
-/* -----------------------------------------------------------------------------
- * Modules styles
- * -------------------------------------------------------------------------- */
-
-#battery {
- animation-timing-function: linear;
- animation-iteration-count: infinite;
- animation-direction: alternate;
-}
-
-#battery.warning,
-#custom-storage.warning {
- color: @flamingo;
-}
-
-#battery.critical,
-#custom-storage.critical {
- color: @red;
-}
-
-#battery.warning.discharging {
- animation-name: blink-warning;
- animation-duration: 3s;
-}
-
-#battery.critical.discharging {
- animation-name: blink-critical;
- animation-duration: 2s;
-}
-
-#cpu.warning {
- color: @flamingo;
-}
-
-#cpu.critical {
- color: @red;
-}
-
-#memory {
- animation-timing-function: linear;
- animation-iteration-count: infinite;
- animation-direction: alternate;
-}
-
-#memory.warning {
- color: @flamingo;
-}
-
-#memory.critical {
- color: @red;
- animation-name: blink-critical;
- animation-duration: 2s;
- padding-left: 5px;
- padding-right: 5px;
-}
-
-#mode {
- background: @overlay0;
- border-bottom: 3px transparent;
- color: @text;
- margin-left: 5px;
- margin-right: 5px;
- border-radius: 20px;
-}
-
-#network.disconnected {
- color: @flamingo;
-}
-
-#pulseaudio {
- padding-top: 6px;
-}
-
-#pulseaudio.muted {
- color: @sky;
-}
-
-#temperature.critical {
- color: @red;
-}
-
-#window {
- font-weight: bold;
- margin-left: 20px;
- margin-right: 10px;
-}
-
-#workspaces {
- font-size: 24px;
-}
-
-#workspaces button {
- /* border-bottom: 3px solid transparent; */
- margin-bottom: 0px;
- padding: 0px;
-}
-
-#custom-launcher {
- color: @lavenderblush;
-}
-
-/* @define-color rosewater #f4dbd6; */
-/* @define-color flamingo #f0c6c6; */
-/* @define-color pink #f5bde6; */
-/* @define-color mauve #c6a0f6; */
-/* @define-color red #ed8796; */
-/* @define-color maroon #ee99a0; */
-/* @define-color peach #f5a97f; */
-/* @define-color yellow #eed49f; */
-/* @define-color green #a6da95; */
-/* @define-color teal #8bd5ca; */
-/* @define-color sky #91d7e3; */
-/* @define-color sapphire #7dc4e4; */
-/* @define-color blue #8aadf4; */
-/* @define-color lavender #b7bdf8; */
-
-
-#custom-signal {
- color: @lavender;
- padding: 0px 5px 0px 5px;
-}
-
-#custom-steam {
- color: @teal;
- padding: 0px 5px 0px 5px;
-}
-
-#custom-spotify {
- color: @green;
- padding: 0px 5px 0px 5px;
-}
-
-#custom-firefox {
- color: @yellow;
- padding: 0px 5px 0px 5px;
-}
-
-#custom-slack {
- color: @peach;
- padding: 0px 5px 0px 5px;
-}
-
-#custom-files {
- color: @pink;
- padding: 0px 5px 0px 5px;
-}
-
-#custom-pomo {
- color: @red;
- padding: 0px 5px 0px 5px;
-}
-
-#custom-vpn {
- color: @lavender;
- padding: 0px 5px 0px 5px;
-}
-
-#wiggle {
- animation-name: blink-warning;
-}
-
-#workspaces button.active {
- border-bottom: 3px solid @lavender;
- color: @green;
-}
-
-#workspaces button.urgent {
- border-color: @lavender;
- color: @yellow;
-}
-
-#custom-power {
- margin-left: 15px;
- margin-right: 15px;
- font-size: 20px;
- color: @flamingo;
-}
-
-#custom-launcher {
- font-size: 24px;
- margin-left: 15px;
- margin-right: 10px;
-}
-
-#backlight.icon {
- padding-right: 1px;
- font-size: 20px;
-}
\ No newline at end of file
diff --git a/nate-work/modules/home-manager/home.nix b/nate-work/modules/home-manager/home.nix
index 80c4a61..bfd22cc 100644
--- a/nate-work/modules/home-manager/home.nix
+++ b/nate-work/modules/home-manager/home.nix
@@ -6,157 +6,155 @@
unstable = import inputs.nixpkgs-unstable { system = "x86_64-linux"; config.allowUnfree = true; };
in
{
- # nixpkgs.overlays = [
- # overlay-unstable
- # ];
-
imports = [
../../../shared/modules/apps/firefox/firefox.nix
+ ../../../shared/modules/apps/ghostty.nix
+ ../../../shared/modules/apps/helix.nix
+ ../../../shared/modules/home-manager/programs.nix
+ ../../../shared/modules/home-manager/git-autosync.nix
../niri/niri_home.nix
../vpn-proxy/vpn-proxy.nix
];
- catppuccin = {
- enable = true;
- flavor = "macchiato";
- accent = "lavender";
- cursors.enable = false;
- kvantum.enable = true;
- zsh-syntax-highlighting.enable = true;
- mako.enable = false;
- };
-
-
home.username = userName;
home.homeDirectory = "/home/${userName}";
programs.home-manager.enable = true;
+ home.stateVersion = "23.11"; # Please read the comment before changing.
- # The home.packages option allows you to install Nix packages into your
- # environment.
+ # Stylix auto-theming - applies to all programs..enable apps
+ stylix.autoEnable = true;
+
+ # Enable shared modules
firefoxApp.enable = true;
-
+ ghosttyApp.enable = true;
+ helixApp.enable = true;
+ sharedPrograms.enable = true;
fonts.fontconfig.enable = true;
# Enable VPN proxy script
vpnProxy.enable = true;
+ # Git autosync for star-command
+ services.git-autosync = {
+ enable = true;
+ repos.star-command = {
+ path = "/home/${userName}/source/star-command";
+ gitName = fullName;
+ gitEmail = email;
+ };
+ };
+
nirihome = {
enable = true;
- homePackages = with pkgs; [
- #
- # Dev Tools
- #
- helix
- vscode-fhs
- unstable.docker_25
- docker-compose
- jq
- gnumake
- mariadb
- cmake
- gcc
- oxker # docker desktop tui <3
- python3
- ## nodejs frontend
- nodejs_24
- husky
- pnpm
- yarn
- ## dev services cli
- gh
- awscli2
- ## AI
- unstable.claude-code
- unstable.opencode
- ## Go stuff
- go
- unstable.delve
- gotools
- go-tools
- govulncheck
- unstable.golangci-lint
- go-swag
- trivy
-
- ### LSP's
- gopls
- nil
- typescript-language-server
- nodePackages_latest.bash-language-server
- openscad-lsp
- vscode-langservers-extracted # provides eslint, markdown, json, css, and html lsp
- yaml-language-server
- ltex-ls
-
- ### Misc
- usbutils
- nfs-utils
-
- #
- # Better Unix
- #
- bat
- duf
- dust
- fd
- fzf
- lsd
- lsof
- ripgrep
- tre-command
- gtop
- htop
- neofetch
- unzip
- nmap
-
- #
- # Photo / Video
- #
- imv
- mpv
- ffmpeg
- audacity
- yt-dlp
- simple-scan
- # iphone connections
- libimobiledevice
- ifuse
-
- #
- # Communication
- #
- mumble
-
- #
- # Other
- #
- chromium
- keepassxc
- obs-studio
- gnome-disk-utility
- hugo
- # unstable.davinci-resolve-studio
-
- #
- # Style
- #
- catppuccin-gtk
- catppuccin-kvantum
- libsForQt5.qtstyleplugin-kvantum
- libsForQt5.qt5ct
- kdePackages.qtstyleplugin-kvantum
- kdePackages.qt6ct
- # Install fonts
- lato
- unstable.nerd-fonts.hurmit
- unstable.nerd-fonts.overpass
- unstable.nerd-fonts.monaspace
- monaspace
- ];
+ homePackages = [];
};
+ # Additional user packages
+ # Note: Programs with Stylix theming are in shared modules
+ home.packages = with pkgs; [
+ #
+ # Dev Tools
+ #
+ vscode-fhs
+ unstable.docker_25
+ docker-compose
+ jq
+ gnumake
+ mariadb
+ cmake
+ gcc
+ oxker # docker desktop tui <3
+ python3
+ ## nodejs frontend
+ nodejs_24
+ husky
+ pnpm
+ yarn
+ ## dev services cli
+ gh
+ awscli2
+ ## AI
+ unstable.claude-code
+ unstable.opencode
+ ## Go stuff
+ go
+ unstable.delve
+ gotools
+ go-tools
+ govulncheck
+ unstable.golangci-lint
+ go-swag
+ trivy
+
+ ### LSP's
+ gopls
+ nil
+ typescript-language-server
+ nodePackages_latest.bash-language-server
+ openscad-lsp
+ vscode-langservers-extracted # provides eslint, markdown, json, css, and html lsp
+ yaml-language-server
+ ltex-ls
+
+ ### Misc
+ usbutils
+ nfs-utils
+
+ #
+ # Unix tools
+ #
+ duf
+ dust
+ fd
+ lsd
+ lsof
+ ripgrep
+ tre-command
+ gtop
+ htop
+ neofetch
+ unzip
+ nmap
+
+ #
+ # Photo / Video
+ #
+ imv
+ ffmpeg
+ audacity
+ yt-dlp
+ simple-scan
+ # iphone connections
+ libimobiledevice
+ ifuse
+
+ #
+ # Communication
+ #
+ mumble
+
+ #
+ # Other
+ #
+ chromium
+ keepassxc
+ obs-studio
+ gnome-disk-utility
+ hugo
+
+ #
+ # Style (Qt plugin for Stylix)
+ #
+ libsForQt5.qtstyleplugin-kvantum
+ libsForQt5.qt5ct
+ # Additional fonts (main fonts managed by Stylix)
+ unstable.nerd-fonts.hurmit
+ unstable.nerd-fonts.overpass
+ unstable.nerd-fonts.monaspace
+ monaspace
+ ];
+
# enable saving ssh secrets (needed for go mod installing private packages)
services.gnome-keyring.enable = true;
services.gnome-keyring.components = [ "ssh" "secrets" ];
@@ -164,11 +162,9 @@
services.mpris-proxy.enable = true;
home.sessionVariables = {
- # BAT_THEME="Catppuccin Macchiato";
EDITOR = "hx";
- XCURSOR_THEME = "Bibata-Modern-Classic";
- XCURSOR_SIZE = "24";
- HYPRCURSOR_THEME = "Bibata-Modern-Classic";
+ # For electron apps
+ NIXOS_OZONE_WL = "1";
};
# Git setup
@@ -272,37 +268,7 @@
};
};
- qt = {
- enable = true;
- platformTheme.name = "kvantum";
- style = {
- name = "kvantum";
- package = pkgs.catppuccin-kvantum.override {
- accent = "lavender";
- variant = "macchiato";
- };
- };
- };
-
- gtk = {
- enable = true;
- # icons
- iconTheme = {
- package = pkgs.catppuccin-papirus-folders;
- name = "Papirus-Dark";
- };
- # gtk theme
- theme = {
- name = "catppuccin-macchiato-lavender-compact+rimless";
- package = pkgs.catppuccin-gtk.override {
- accents = [ "lavender" ];
- size = "compact";
- tweaks = [ "rimless" ];
- variant = "macchiato";
- };
- };
- # cursor defined in hypr-home.nix
- };
+ # Stylix handles Qt and GTK theming
home.file = lib.mkMerge [
# Shared dotfiles
@@ -311,7 +277,7 @@
in
if builtins.pathExists sharedDotfilesPath then
builtins.listToAttrs (map (name: {
- name = "${config.xdg.configHome}/${name}";
+ name = ".config/${name}";
value = { source = lib.mkDefault (sharedDotfilesPath + "/${name}"); };
}) (builtins.attrNames (builtins.readDir sharedDotfilesPath)))
else {})
@@ -321,7 +287,7 @@
in
if builtins.pathExists localDotfilesPath && builtins.readDir localDotfilesPath != {} then
builtins.listToAttrs (map (name: {
- name = "${config.xdg.configHome}/${name}";
+ name = ".config/${name}";
value = { source = localDotfilesPath + "/${name}"; };
}) (builtins.attrNames (builtins.readDir localDotfilesPath)))
else {})
@@ -330,23 +296,7 @@
xdg.configFile = {
# Active linked dotfiles
"hypr".source = config.lib.file.mkOutOfStoreSymlink "/home/nate/nixos/nate-work/linked-dotfiles/hypr";
- "niri".source = config.lib.file.mkOutOfStoreSymlink "/home/nate/nixos/nate-work/linked-dotfiles/niri";
- "waybar".source = config.lib.file.mkOutOfStoreSymlink "/home/nate/nixos/nate-work/linked-dotfiles/waybar";
- # Shared
- "helix".source = config.lib.file.mkOutOfStoreSymlink "/home/nate/nixos/shared/linked-dotfiles/helix";
-
- # Theme files
- "gtk-4.0/assets".source = "${config.gtk.theme.package}/share/themes/${config.gtk.theme.name}/gtk-4.0/assets";
- "gtk-4.0/gtk.css".source = "${config.gtk.theme.package}/share/themes/${config.gtk.theme.name}/gtk-4.0/gtk.css";
- "gtk-4.0/gtk-dark.css".source = "${config.gtk.theme.package}/share/themes/${config.gtk.theme.name}/gtk-4.0/gtk-dark.css";
- "Kvantum/kvantum.kvconfig".source = (pkgs.formats.ini {}).generate "kvantum.kvconfig" {
- General.theme = "catppuccin-macchiato-lavender";
- };
+ "niri".source = config.lib.file.mkOutOfStoreSymlink "/home/nate/nixos/nate-work/linked-dotfiles/niri";
+ # waybar is now managed by shared/modules/home-manager/waybar.nix via waybarConfig.enable
};
- # home.file.".icons/default/index.theme".text = ''
- # [icon theme]
- # Inherits=Catppuccin-Macchiato-Lavender-Cursors
- # '';
-
- home.stateVersion = "23.11"; # Please read the comment before changing.
}
diff --git a/nate-work/modules/hypr/hyprland.nix b/nate-work/modules/hypr/hyprland.nix
index b51c3bc..3c6b877 100644
--- a/nate-work/modules/hypr/hyprland.nix
+++ b/nate-work/modules/hypr/hyprland.nix
@@ -17,9 +17,6 @@ in
config = lib.mkIf config.hypr.enable {
- catppuccin.enable = true;
- catppuccin.flavor = "macchiato";
- catppuccin.accent = "lavender";
programs.hyprland.enable = true;
programs.hyprland.withUWSM = true;
# programs.hyprland.package = unstable.hyprland;
diff --git a/nate-work/modules/niri/niri_home.nix b/nate-work/modules/niri/niri_home.nix
index 6adc12e..0949962 100644
--- a/nate-work/modules/niri/niri_home.nix
+++ b/nate-work/modules/niri/niri_home.nix
@@ -1,5 +1,9 @@
{ inputs, lib, config, pkgs, ... }:
{
+ imports = [
+ ../../../shared/modules/home-manager/waybar.nix
+ ];
+
options.nirihome = {
enable = lib.mkEnableOption "Enable niri home config";
homePackages = lib.mkOption {
@@ -19,21 +23,16 @@
XDG_CURRENT_DESKTOP = "niri";
};
- home.pointerCursor = {
- gtk.enable = true;
- x11.enable = true;
- name = "Bibata-Modern-Classic";
- package = pkgs.bibata-cursors;
- size = 32;
- };
+ # Cursor is managed by Stylix (stylix.cursor in nate-work/default.nix)
+
+ # Waybar with Stylix theming
+ waybarConfig.enable = true;
home.packages = with pkgs; lib.lists.flatten [
[
### niri packages
swaybg
swaylock-effects
- waybar
- wofi
# Etc
gopsuinfo # For system stats in panel
wl-clipboard # System clipboard
diff --git a/nate/default.nix b/nate/default.nix
index af66ad0..0b4ad02 100644
--- a/nate/default.nix
+++ b/nate/default.nix
@@ -4,7 +4,7 @@
fullName = "Nate Anderson";
email = "n8r@tuta.io";
hostName = "winmax";
- desktop = "sway";
+ desktop = "niri";
gaming = true;
in
{
@@ -20,9 +20,80 @@
installGaming = gaming;
};
+ # Stylix theming - auto-generate color scheme from wallpaper
+ stylix = {
+ enable = true;
+ image = ../shared/modules/services/wallpapers/Dark/FSO-Dark.jpg;
+ polarity = "dark";
+
+ # System-wide cursor
+ cursor = {
+ package = pkgs.bibata-cursors;
+ name = "Bibata-Modern-Classic";
+ size = 32;
+ };
+
+ # Fonts
+ fonts = {
+ serif = {
+ package = pkgs.lato;
+ name = "Lato";
+ };
+ sansSerif = {
+ package = pkgs.lato;
+ name = "Lato";
+ };
+ monospace = {
+ package = pkgs.maple-mono.NF;
+ name = "Maple Mono NF";
+ };
+ emoji = {
+ package = pkgs.noto-fonts-color-emoji;
+ name = "Noto Color Emoji";
+ };
+ sizes = {
+ applications = 12;
+ desktop = 10;
+ popups = 10;
+ terminal = 11;
+ };
+ };
+
+ # Let plymouth use its own theme
+ targets.plymouth.enable = false;
+ };
+
# Limit the number of generations to keep
boot.loader.systemd-boot.configurationLimit = 5;
+ # Systemd initrd for faster boot
+ boot.initrd.systemd.enable = true;
+
+ # Plymouth boot animation
+ boot.plymouth = {
+ enable = true;
+ theme = "rings";
+ themePackages = with pkgs; [
+ (adi1090x-plymouth-themes.override {
+ selected_themes = [ "rings" ];
+ })
+ ];
+ };
+
+ # Silent boot
+ boot.consoleLogLevel = 0;
+ boot.initrd.verbose = false;
+ boot.kernelParams = [
+ "quiet"
+ "splash"
+ "boot.shell_on_fail"
+ "loglevel=3"
+ "rd.systemd.show_status=false"
+ "rd.udev.log_level=3"
+ "udev.log_priority=3"
+ ];
+ boot.loader.timeout = 0;
+
# Perform garbage collection weekly to maintain low disk usage
nix.gc = {
automatic = true;
@@ -31,9 +102,5 @@
};
# Optimize storage
- # You can also manually optimize the store via:
- # nix-store --optimise
- # Refer to the following link for more details:
- # https://nixos.org/manual/nix/stable/command-ref/conf-file.html#conf-auto-optimise-store
nix.settings.auto-optimise-store = true;
}
diff --git a/nate/desktop-configuration.nix b/nate/desktop-configuration.nix
index db61386..3dd512e 100644
--- a/nate/desktop-configuration.nix
+++ b/nate/desktop-configuration.nix
@@ -1,13 +1,13 @@
{ config, lib, inputs, outputs, pkgs, timeZone, system, ... }:
let
- supportedDesktops = [ "sway" ];
+ supportedDesktops = [ "sway" "niri" ];
supportedDesktopsStr = lib.strings.concatStringsSep ", " supportedDesktops;
deskCfg = config.deskCfg;
in
{
options.deskCfg = {
de = lib.mkOption {
- default = "sway";
+ default = "niri";
type = lib.types.str;
description = "Desktop Environment";
};
@@ -29,9 +29,8 @@ in
imports = [
modules/user/main_user.nix
modules/sway/sway_conf.nix
+ modules/niri/niri_conf.nix
../shared/modules/services/motu-m4-combined.nix
-
- # inputs.nur.hmModules.nur
];
config = {
@@ -54,7 +53,6 @@ in
# Use the systemd-boot EFI boot loader.
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
- # boot.plymouth.enable = true;
networking.hostName = deskCfg.hostName; # Define your hostname.
networking.networkmanager.enable = true; # Easiest to use and most distros use this by default.
@@ -68,12 +66,20 @@ in
};
swaywm = {
- enable = true;
+ enable = deskCfg.de == "sway";
useNonFree = true;
installGaming = deskCfg.installGaming;
systemPackages = [];
};
+ niriwm = {
+ enable = deskCfg.de == "niri";
+ useNonFree = true;
+ installGaming = deskCfg.installGaming;
+ user = deskCfg.userName;
+ systemPackages = [];
+ };
+
services.motu-m4-combined = {
enable = true;
user = deskCfg.userName;
diff --git a/nate/modules/home-manager/home.nix b/nate/modules/home-manager/home.nix
index cf2ad6d..67d46fc 100644
--- a/nate/modules/home-manager/home.nix
+++ b/nate/modules/home-manager/home.nix
@@ -4,76 +4,67 @@
fullName = "Nathan Anderson";
email = "n8r@tuta.io";
unstable = import inputs.nixpkgs-unstable { system = "x86_64-linux"; config.allowUnfree = true; };
- # oldstable = import inputs.nixpkgs-23 { system = "x86_64-linux"; config.allowUnfree = true; };
- # davinciDesktop = pkgs.makeDesktopItem {
- # name = "davinci-resolve-studio";
- # desktopName = "Davinci Resolve Studio";
- # exec = "${oldstable.davinci-resolve-studio}";
- # };
- # overlay-unstable = final: prev: {
- # unstable = inputs.nixpkgs-unstable.legacyPackages.x86_64-linux;
- # };
- # overlay-oldstable = final: prev: {
- # pkgs23 = inputs.nixpkgs-23.legacyPackages.x86_64-linux;
- # };
- # overlay-unstable = final: prev: {
- # # unstable = inputs.nixpkgs-unstable.legacyPackages.x86_64-linux;
- # unstable = import inputs.nixpkgs-unstable {
- # system = "x86_64-linux";
- # config = {
- # allowUnfreePredicate = (pkg: true);
- # allowUnfree = true;
- # };
- # };
- # };
in
{
- # nixpkgs.overlays = [
- # overlay-unstable
- # ];
-
imports = [
../../../shared/modules/apps/firefox/firefox.nix
+ ../../../shared/modules/apps/ghostty.nix
+ ../../../shared/modules/apps/helix.nix
+ ../../../shared/modules/home-manager/programs.nix
+ ../../../shared/modules/home-manager/git-autosync.nix
+ ../niri/niri_home.nix
];
-
+
home.username = userName;
home.homeDirectory = "/home/${userName}";
programs.home-manager.enable = true;
-
home.stateVersion = "23.11"; # Please read the comment before changing.
- # The home.packages option allows you to install Nix packages into your
- # environment.
+ # Stylix auto-theming - applies to all programs..enable apps
+ stylix.autoEnable = true;
+
+ # Enable shared modules
firefoxApp.enable = true;
-
+ ghosttyApp.enable = true;
+ helixApp.enable = true;
+ sharedPrograms.enable = true;
fonts.fontconfig.enable = true;
+ # Git autosync for star-command
+ services.git-autosync = {
+ enable = true;
+ repos.star-command = {
+ path = "/home/${userName}/source/star-command";
+ gitName = fullName;
+ gitEmail = email;
+ };
+ };
+ nirihome = {
+ enable = true;
+ homePackages = [];
+ };
+
+ # Additional user packages
+ # Note: Programs with Stylix theming are in shared modules
home.packages = with pkgs; [
- # nur.repos.crazazy.js.eslint
#
# Dev Tools
#
- helix
docker
unstable.godot
jq
- ### LSP's
- nil # Nix LSP
- nodePackages_latest.bash-language-server
- vscode-langservers-extracted # provides eslint, markdown, json, css, and html lsp
- python311Packages.python-lsp-server
-
- # zls
- ### Misc
- # android-udev-rules
- # android-tools
- # sdkmanager
+ python3
unstable.opencode
unstable.claude-code
usbutils
openscad
+ ### LSP's
+ nil # Nix LSP
+ nodePackages_latest.bash-language-server
+ vscode-langservers-extracted # provides eslint, markdown, json, css, and html lsp
+ python313Packages.python-lsp-server
#
# Gaming
@@ -83,18 +74,15 @@
wine-wayland
#
- # Better Unix
+ # Unix tools
#
- bat
duf
dust
fd
- fzf
lsd
ripgrep
gtop
htop
- # Normies
unzip
#
@@ -102,14 +90,9 @@
#
unstable.davinci-resolve-studio
obs-studio
- # davinciDesktop
imv
- mpv
ffmpeg
- #
- # Communication
- #
#
# Other
#
@@ -117,13 +100,11 @@
simple-scan
#
- # Style
+ # Style (Qt plugin for Stylix)
#
- catppuccin-kvantum
libsForQt5.qtstyleplugin-kvantum
libsForQt5.qt5ct
- # Install fonts
- lato
+ # Additional fonts (main fonts managed by Stylix)
unstable.nerd-fonts.hurmit
unstable.nerd-fonts.overpass
recursive
@@ -153,19 +134,8 @@
];
xdg.configFile = {
- # Active linked dotfiles
- "hypr".source = config.lib.file.mkOutOfStoreSymlink "/home/nate/nixos/nate-work/linked-dotfiles/hypr";
- "waybar".source = config.lib.file.mkOutOfStoreSymlink "/home/nate/nixos/nate-work/linked-dotfiles/waybar";
- # Shared
- "helix".source = config.lib.file.mkOutOfStoreSymlink "/home/nate/nixos/shared/linked-dotfiles/helix";
-
- # Theme files
- "gtk-4.0/assets".source = "${config.gtk.theme.package}/share/themes/${config.gtk.theme.name}/gtk-4.0/assets";
- "gtk-4.0/gtk.css".source = "${config.gtk.theme.package}/share/themes/${config.gtk.theme.name}/gtk-4.0/gtk.css";
- "gtk-4.0/gtk-dark.css".source = "${config.gtk.theme.package}/share/themes/${config.gtk.theme.name}/gtk-4.0/gtk-dark.css";
- "Kvantum/kvantum.kvconfig".source = (pkgs.formats.ini {}).generate "kvantum.kvconfig" {
- General.theme = "catppuccin-macchiato-lavender";
- };
+ # Active linked dotfiles - use frame12's niri config as it's the most up-to-date
+ "niri".source = config.lib.file.mkOutOfStoreSymlink "/home/nate/nixos/frame12/linked-dotfiles/niri";
};
# Configure default applications for opening links
@@ -191,11 +161,25 @@
# Enable bluetooth headphone controls
services.mpris-proxy.enable = true;
+ # SwayOSD - on-screen display for volume, brightness, caps lock
+ services.swayosd = {
+ enable = true;
+ topMargin = 0.9;
+ };
+
+ # SwayNC - notification center (Stylix auto-themes this)
+ services.swaync = {
+ enable = true;
+ settings = {
+ positionX = "center";
+ positionY = "top";
+ notification-window-width = 800;
+ };
+ };
+
home.sessionVariables = {
- # MANPAGER="sh -c 'col -bx | bat -l man -p'";
- BAT_THEME="Catppuccin Macchiato";
EDITOR = "hx";
- XDG_CURRENT_DESKTOP="sway";
+ # For electron apps
NIXOS_OZONE_WL = "1";
};
@@ -209,7 +193,6 @@
merge = { conflictStyle="zdiff3"; };
pull = { ff = "only"; };
push = { autoSetupRemote="true"; };
- # Vasion rewrite rule
url = {
"git@github.com:" = {
insteadOf = "https://github.com/";
@@ -236,6 +219,7 @@
bash.enable = true;
};
+
# Zsh setup
programs.zsh = {
enable = true;
@@ -266,51 +250,18 @@
lt="lsd --tree --depth=2";
cat="bat --paging=never";
rm="rm -i";
- adaptiveoff="swaymsg 'output * adaptive_sync off'";
- adaptiveon="swaymsg 'output * adaptive_sync on'";
+ };
+ syntaxHighlighting = {
+ enable = true;
};
};
- qt = {
- enable = true;
- platformTheme.name = "qtct";
- style.name = "kvantum";
- };
+ # Stylix handles Qt and GTK theming
- gtk = {
+ services.wlsunset = {
enable = true;
- cursorTheme = {
- package = pkgs.catppuccin-cursors.macchiatoLavender;
- name = "catppuccin-macchiato-lavender-cursors";
- };
- iconTheme = {
- package = pkgs.catppuccin-papirus-folders;
- name = "Papirus-Dark";
- };
- theme = {
- name = "catppuccin-macchiato-lavender-compact+rimless";
- package = pkgs.catppuccin-gtk.override {
- accents = [ "lavender" ];
- size = "compact";
- tweaks = [ "rimless" ];
- variant = "macchiato";
- };
- };
+ sunrise = "07:00";
+ sunset = "17:00";
+ temperature.night = 3500;
};
- # Symlink in gtk and kvantum theme to ~/.config
- # xdg.configFile = {
- # "gtk-4.0/assets".source = "${config.gtk.theme.package}/share/themes/${config.gtk.theme.name}/gtk-4.0/assets";
- # "gtk-4.0/gtk.css".source = "${config.gtk.theme.package}/share/themes/${config.gtk.theme.name}/gtk-4.0/gtk.css";
- # "gtk-4.0/gtk-dark.css".source = "${config.gtk.theme.package}/share/themes/${config.gtk.theme.name}/gtk-4.0/gtk-dark.css";
- # "Kvantum/kvantum.kvconfig".text = ''
- # [General]
- # theme=Catppuccin-Frappe-Blue
- # '';
- # "Kvantum/Catppuccin-Frappe-Blue".source = "${pkgs.catppuccin-kvantum}/share/Kvantum/Catppuccin-Frappe-Blue";
- # };
-
- # home.file.".icons/default/index.theme".text = ''
- # [icon theme]
- # Inherits=Catppuccin-Macchiato-Lavender-Cursors
- # '';
}
diff --git a/nate/modules/niri/niri_conf.nix b/nate/modules/niri/niri_conf.nix
new file mode 100644
index 0000000..eecf11f
--- /dev/null
+++ b/nate/modules/niri/niri_conf.nix
@@ -0,0 +1,287 @@
+{
+ inputs,
+ lib,
+ config,
+ pkgs,
+ userName,
+ ...
+}:
+let
+ unstable = import inputs.nixpkgs-unstable {
+ system = "x86_64-linux";
+ config.allowUnfree = true;
+ };
+in
+{
+ options.niriwm = {
+ enable = lib.mkEnableOption "Enable niri window manager.";
+ useNonFree = lib.mkOption {
+ default = false;
+ example = true;
+ description = "Whether to enable non-free software in the niri config";
+ };
+ installGaming = lib.mkOption {
+ default = false;
+ example = true;
+ description = "Whether to install gaming software on the system.";
+ };
+ systemPackages = lib.mkOption {
+ default = [ ];
+ description = "Add any additional packages desired. Merged with niri defaults.";
+ };
+ user = lib.mkOption {
+ type = lib.types.str;
+ };
+ };
+
+ ###
+ ## Configuration
+ ###
+ config = lib.mkIf config.niriwm.enable {
+
+ nixpkgs.config.allowUnfree = config.niriwm.useNonFree;
+
+ ###
+ ## XDG portal setup
+ ###
+ xdg.portal = {
+ config = {
+ common = {
+ default = [
+ "wlr"
+ ];
+ };
+ };
+ extraPortals = with pkgs; [
+ xdg-desktop-portal-gnome
+ ];
+ wlr.enable = true;
+ enable = true;
+ };
+ xdg.sounds.enable = true;
+
+ ###
+ ## System Packages
+ ###
+ environment.systemPackages =
+ with pkgs;
+ lib.lists.flatten [
+ [
+ bash
+ egl-wayland
+ git
+ glib # gsettings
+ grim
+ kanshi
+ libnotify
+ lxqt.lxqt-policykit
+ man-pages
+ man-pages-posix
+ nautilus
+ networkmanagerapplet
+ pavucontrol
+ slurp
+ swaylock
+ swayosd
+ syncthingtray
+ unstable.ghostty
+ unstable.xwayland-satellite
+ wdisplays
+ wl-clipboard
+ xdg-utils
+ zsh
+ ]
+ config.niriwm.systemPackages
+ ];
+ environment.variables.QT_STYLE_OVERRIDE = "kvantum";
+ environment.sessionVariables = {
+ # use wayland
+ MOZ_ENABLE_WAYLAND = "1";
+ T_QPA_PLATFORM = "wayland";
+ GDK_BACKEND = "wayland";
+ WLR_NO_HARDWARE_CURSORS = "1";
+ ELECTRON_OZONE_PLATFORM_HINT = "auto";
+ NIXOS_OZONE_WL = "1";
+ };
+
+ # adds additional man pages
+ documentation.dev.enable = true;
+
+ programs.steam = lib.mkIf config.niriwm.installGaming {
+ enable = true;
+ remotePlay.openFirewall = true;
+ gamescopeSession.enable = true;
+ };
+ programs.gamemode = {
+ enable = true;
+ settings = {
+ general = {
+ reaper_freq = 5;
+ desiredgov = "performance";
+ softrealtime = "auto";
+ };
+ };
+ };
+ programs.kdeconnect.enable = true;
+ programs.niri.enable = true;
+ programs.regreet.enable = true;
+ programs.xfconf.enable = true;
+ programs.zsh.enable = true;
+ programs.ssh.startAgent = false; # Using GNOME Keyring's gcr-ssh-agent instead
+ programs.adb.enable = true;
+
+ # For nautilus
+ services.gnome.sushi.enable = true;
+ programs.nautilus-open-any-terminal = {
+ enable = true;
+ terminal = "ghostty";
+ };
+
+ services.syncthing = {
+ enable = true;
+ dataDir = "/home/${config.niriwm.user}/.syncthing";
+ openDefaultPorts = true;
+ user = config.niriwm.user;
+ };
+ systemd.services.syncthing.environment.STNODEFAULTFOLDER = "true"; # Don't create default ~/Sync folder
+
+ # Set zsh as the default shell system-wide
+ users.defaultUserShell = pkgs.zsh;
+ environment.shells = with pkgs; [
+ zsh
+ bash
+ ];
+
+ ###
+ ## Services
+ ###
+ services.blueman.enable = true;
+ services.gvfs.enable = true; # file manager mount, trash, etc
+ services.tumbler.enable = true; # thunar thumbnails
+ services.openssh.enable = true;
+ services.dbus.enable = true;
+ services.gnome.gnome-keyring.enable = true;
+ services.flatpak.enable = true;
+ services.usbmuxd.enable = true;
+ services.tailscale = {
+ enable = true;
+ openFirewall = true;
+ };
+
+ # For yubioath desktop
+ services.pcscd.enable = true;
+
+ # Printing
+ services.printing = {
+ enable = true;
+ browsing = true;
+ drivers = [ pkgs.brlaser ];
+ };
+
+ services.avahi = {
+ enable = true;
+ nssmdns4 = true;
+ openFirewall = true;
+ };
+
+ networking.firewall = {
+ enable = true;
+ allowedTCPPorts = [ 8080 8081 ];
+ };
+
+ # Audio - Modern PipeWire setup
+ services.pulseaudio.enable = false;
+ security.rtkit.enable = true;
+ services.pipewire = {
+ enable = true;
+ audio.enable = true;
+ alsa.enable = true;
+ alsa.support32Bit = true;
+ pulse.enable = true;
+ wireplumber.enable = true;
+ wireplumber.extraConfig = {
+ "wireplumber.settings" = {
+ bluetooth.autoswitch-to-headset-profile = false;
+ };
+ bluetoothEnhancements = {
+ "monitor.bluez.properties" = {
+ "bluez5.enable-sbc-xq" = true;
+ "bluez5.enable-msbc" = true;
+ "bluez5.enable-hw-volume" = true;
+ "bluez5.roles" = [
+ "a2dp_sink"
+ "a2dp_source"
+ "bap_sink"
+ "bap_source"
+ "hfp_hf"
+ "hfp_ag"
+ ];
+ };
+ };
+ };
+ };
+
+ ###
+ ## Misc
+ ###
+ # Necessary for home-manager niri setup
+ security.polkit.enable = true;
+
+ # Keyring setup
+ security.pam.services.greetd.enableGnomeKeyring = true;
+ security.pam.services.login.enableGnomeKeyring = true;
+
+ hardware.bluetooth = {
+ enable = true;
+ powerOnBoot = true;
+ settings = {
+ General = {
+ Name = "Nate-WinMax";
+ ControllerMode = "dual";
+ FastConnectable = "true";
+ Experimental = "true";
+ Privacy = "device";
+ JustWorksRepairing = "always";
+ Class = "0x000100";
+ };
+ Policy = {
+ AutoEnable = "true";
+ };
+ LE = {
+ EnableAdvMonInterleaveScan = 1;
+ };
+ };
+ };
+ hardware.xpadneo.enable = true;
+
+ # Hardware scanning support
+ hardware.sane = {
+ enable = true;
+ brscan5.enable = true;
+ };
+
+ virtualisation.docker.enable = true;
+
+ # udev rules
+ services.udev.extraRules = ''
+ # For betaflight configurator
+ # DFU (Internal bootloader for STM32 and AT32 MCUs)
+ SUBSYSTEM=="usb", ATTRS{idVendor}=="2e3c", ATTRS{idProduct}=="df11", MODE="0664", GROUP="dialout"
+ SUBSYSTEM=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE="0664", GROUP="dialout"
+ '';
+
+ # AMD GPU setup (WinMax uses AMD)
+ services.xserver.videoDrivers = [ "amdgpu" ];
+ # Enable HIP for ROCm
+ systemd.tmpfiles.rules = [
+ "L+ /opt/rocm/hip - - - - ${pkgs.rocmPackages.clr}"
+ ];
+ hardware.graphics = {
+ enable = true;
+ enable32Bit = true;
+ extraPackages = with pkgs; [
+ rocmPackages.clr.icd
+ ];
+ };
+ };
+}
diff --git a/nate/modules/niri/niri_home.nix b/nate/modules/niri/niri_home.nix
new file mode 100644
index 0000000..8d06e8a
--- /dev/null
+++ b/nate/modules/niri/niri_home.nix
@@ -0,0 +1,63 @@
+{ inputs, lib, config, pkgs, ... }:
+{
+ imports = [
+ ../../../shared/modules/home-manager/waybar.nix
+ ];
+
+ options.nirihome = {
+ enable = lib.mkEnableOption "Enable niri home config";
+ homePackages = lib.mkOption {
+ default = [];
+ description = "Add any additional packages desired. Merged with niri defaults.";
+ };
+ };
+
+ config = lib.mkIf config.nirihome.enable {
+ # Note: We don't use wayland.windowManager.niri in home-manager
+ # because we manage the niri config through dotfiles.
+ # The system-level module enables niri via programs.niri.enable
+
+ # Import systemd variables for niri
+ systemd.user.sessionVariables = {
+ WAYLAND_DISPLAY = "wayland-1";
+ XDG_CURRENT_DESKTOP = "niri";
+ };
+
+ # Cursor is managed by Stylix (stylix.cursor in nate/default.nix)
+
+ # Waybar with Stylix theming
+ waybarConfig.enable = true;
+
+ home.packages = with pkgs; lib.lists.flatten [
+ [
+ ### niri packages
+ swaybg
+ swaylock-effects
+ # Etc
+ gopsuinfo # For system stats in panel
+ wl-clipboard # System clipboard
+ brightnessctl
+ wev
+ wdisplays
+ # Notifs
+ libnotify
+ swaynotificationcenter
+ # Tray Applets
+ networkmanagerapplet
+ pavucontrol
+ syncthingtray
+ tailscale-systray
+ # include portals here for flatpak
+ xdg-desktop-portal-gnome
+ xdg-desktop-portal-gtk
+ ]
+ config.nirihome.homePackages
+ ];
+ programs.cava = {
+ enable = true;
+ settings = {
+ smoothing.noise_reduction = 55;
+ };
+ };
+ };
+}
diff --git a/scrappy/modules/home-manager/home.nix b/scrappy/modules/home-manager/home.nix
index e4a8326..6d40640 100644
--- a/scrappy/modules/home-manager/home.nix
+++ b/scrappy/modules/home-manager/home.nix
@@ -233,7 +233,7 @@
#
bat
duf
- du-dust
+ dust
fd
fzf
lsd
@@ -300,9 +300,9 @@
# Git setup
programs.git = {
enable = true;
- userEmail = email;
- userName = fullName;
- extraConfig = {
+ settings = {
+ user.name = fullName;
+ user.email = email;
include = { path = "${config.xdg.configHome}/macchiato.gitconfig"; };
init = { defaultBranch = "main"; };
pull = { ff = "only"; };
@@ -310,10 +310,14 @@
push = { autoSetupRemote="true"; };
delta = { features = "Catppuccin Macchiato"; };
};
- delta.enable = true;
};
programs = {
+ delta = {
+ enable = true;
+ enableGitIntegration = true;
+ };
+
direnv = {
enable = true;
enableZshIntegration = true; # see note on other shells below
diff --git a/shared/modules/apps/firefox/firefox.nix b/shared/modules/apps/firefox/firefox.nix
index 1df6339..9eed1a8 100644
--- a/shared/modules/apps/firefox/firefox.nix
+++ b/shared/modules/apps/firefox/firefox.nix
@@ -1,6 +1,9 @@
-{lib, config, pkgs, inputs, ...}:
+{lib, config, pkgs, inputs, options, ...}:
let
cfg = config.firefoxApp;
+ # Check if stylix home-manager module is loaded by checking for the firefox target option
+ # Only check options (not config) to avoid infinite recursion during module evaluation
+ hasStylixFirefox = (options ? stylix) && (options.stylix ? targets) && (options.stylix.targets ? firefox);
in
{
# imports = [
@@ -10,11 +13,10 @@ in
options.firefoxApp = {
enable = lib.mkEnableOption "enable firefox browser";
};
- config = lib.mkIf cfg.enable {
- # Tell Stylix which Firefox profile to theme
- stylix.targets.firefox.profileNames = [ "default" ];
-
- programs.firefox = {
+ config = lib.mkIf cfg.enable (lib.mkMerge ([
+ # Firefox configuration
+ {
+ programs.firefox = {
# Add pipewire support
# package = (pkgs.wrapFirefox (pkgs.firefox-unwrapped.override { pipewireSupport = true;}) {});
enable = true;
@@ -112,5 +114,10 @@ in
};
};
};
- };
+ }
+ ] ++ lib.optional hasStylixFirefox {
+ # Stylix integration (only if stylix module is loaded)
+ # Uses mkIf to check autoEnable at runtime, avoiding infinite recursion
+ stylix.targets.firefox.profileNames = lib.mkIf config.stylix.autoEnable [ "default" ];
+ }));
}
diff --git a/shared/modules/apps/ghostty.nix b/shared/modules/apps/ghostty.nix
new file mode 100644
index 0000000..8aa8a93
--- /dev/null
+++ b/shared/modules/apps/ghostty.nix
@@ -0,0 +1,44 @@
+{lib, config, ...}:
+let
+ cfg = config.ghosttyApp;
+in
+{
+ options.ghosttyApp = {
+ enable = lib.mkEnableOption "enable ghostty terminal";
+
+ fontFamily = lib.mkOption {
+ type = lib.types.str;
+ default = "Maple Mono NF";
+ description = "Font family to use in ghostty";
+ };
+
+ enableLigatures = lib.mkOption {
+ type = lib.types.bool;
+ default = true;
+ description = "Enable font ligatures in ghostty";
+ };
+ };
+
+ config = lib.mkIf cfg.enable {
+ programs.ghostty = {
+ enable = true;
+ settings = {
+ font-family = cfg.fontFamily;
+
+ # Ligatures - Maple Mono NF has full ligature support
+ font-feature = lib.mkIf cfg.enableLigatures [
+ "+calt" # contextual alternates
+ "+liga" # standard ligatures
+ ];
+
+ window-padding-x = 4;
+ window-padding-y = 4;
+
+ keybind = [
+ "ctrl+shift+plus=increase_font_size:1"
+ "shift+enter=text:\\n"
+ ];
+ };
+ };
+ };
+}
diff --git a/shared/modules/apps/helix.nix b/shared/modules/apps/helix.nix
new file mode 100644
index 0000000..f9e7f3e
--- /dev/null
+++ b/shared/modules/apps/helix.nix
@@ -0,0 +1,367 @@
+{lib, config, ...}:
+let
+ cfg = config.helixApp;
+in
+{
+ options.helixApp = {
+ enable = lib.mkEnableOption "enable helix editor";
+ };
+
+ config = lib.mkIf cfg.enable {
+ # Let Stylix auto-theme helix
+ stylix.targets.helix.enable = true;
+
+ programs.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";
+ };
+ };
+ };
+ };
+}
diff --git a/shared/modules/home-manager/programs.nix b/shared/modules/home-manager/programs.nix
new file mode 100644
index 0000000..dbaadf0
--- /dev/null
+++ b/shared/modules/home-manager/programs.nix
@@ -0,0 +1,63 @@
+{config, lib, ...}:
+let
+ cfg = config.sharedPrograms;
+in
+{
+ options.sharedPrograms = {
+ enable = lib.mkEnableOption "enable all basic programs with Stylix auto-theming";
+
+ bat.enable = lib.mkEnableOption "enable bat (cat replacement)";
+ fzf.enable = lib.mkEnableOption "enable fzf (fuzzy finder)";
+ btop.enable = lib.mkEnableOption "enable btop (system monitor)";
+ mpv.enable = lib.mkEnableOption "enable mpv (media player)";
+ wofi.enable = lib.mkEnableOption "enable wofi (application launcher)";
+ foot.enable = lib.mkEnableOption "enable foot (terminal emulator)";
+ };
+
+ config = lib.mkMerge [
+ # When sharedPrograms.enable is true, enable all programs
+ (lib.mkIf cfg.enable {
+ sharedPrograms.bat.enable = lib.mkDefault true;
+ sharedPrograms.fzf.enable = lib.mkDefault true;
+ sharedPrograms.btop.enable = lib.mkDefault true;
+ sharedPrograms.mpv.enable = lib.mkDefault true;
+ sharedPrograms.wofi.enable = lib.mkDefault true;
+ sharedPrograms.foot.enable = lib.mkDefault true;
+ })
+
+ # Individual program configurations
+ (lib.mkIf cfg.bat.enable {
+ programs.bat.enable = true;
+ })
+
+ (lib.mkIf cfg.fzf.enable {
+ programs.fzf = {
+ enable = true;
+ enableZshIntegration = true;
+ };
+ })
+
+ (lib.mkIf cfg.btop.enable {
+ programs.btop.enable = true;
+ })
+
+ (lib.mkIf cfg.mpv.enable {
+ programs.mpv.enable = true;
+ })
+
+ (lib.mkIf cfg.wofi.enable {
+ programs.wofi.enable = true;
+ })
+
+ (lib.mkIf cfg.foot.enable {
+ programs.foot = {
+ enable = true;
+ settings = {
+ main = {
+ pad = "4x4";
+ };
+ };
+ };
+ })
+ ];
+}
diff --git a/shared/modules/services/wallpapers/Dark/FSO-Dark.jpg b/shared/modules/services/wallpapers/Dark/FSO-Dark.jpg
new file mode 100644
index 0000000..d46c0ea
Binary files /dev/null and b/shared/modules/services/wallpapers/Dark/FSO-Dark.jpg differ
diff --git a/shared/modules/services/wallpapers/Dark/IU-Dark.jpg b/shared/modules/services/wallpapers/Dark/IU-Dark.jpg
new file mode 100644
index 0000000..d604238
Binary files /dev/null and b/shared/modules/services/wallpapers/Dark/IU-Dark.jpg differ