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 &amp; - 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