diff --git a/flake.lock b/flake.lock
index 14594bc..c6b358f 100644
--- a/flake.lock
+++ b/flake.lock
@@ -1,5 +1,23 @@
{
"nodes": {
+ "flake-parts": {
+ "inputs": {
+ "nixpkgs-lib": "nixpkgs-lib"
+ },
+ "locked": {
+ "lastModified": 1726153070,
+ "narHash": "sha256-HO4zgY0ekfwO5bX0QH/3kJ/h4KvUDFZg8YpkNwIbg1U=",
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "rev": "bcef6817a8b2aa20a5a6dbb19b43e63c5bf8619a",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "type": "github"
+ }
+ },
"home-manager": {
"inputs": {
"nixpkgs": [
@@ -21,18 +39,75 @@
"type": "github"
}
},
- "nixpkgs": {
+ "niri": {
+ "inputs": {
+ "flake-parts": "flake-parts",
+ "niri-stable": "niri-stable",
+ "niri-unstable": "niri-unstable",
+ "nixpkgs": "nixpkgs",
+ "nixpkgs-stable": "nixpkgs-stable",
+ "xwayland-satellite-stable": "xwayland-satellite-stable",
+ "xwayland-satellite-unstable": "xwayland-satellite-unstable"
+ },
"locked": {
- "lastModified": 1719426051,
- "narHash": "sha256-yJL9VYQhaRM7xs0M867ZFxwaONB9T2Q4LnGo1WovuR4=",
- "owner": "nixos",
- "repo": "nixpkgs",
- "rev": "89c49874fb15f4124bf71ca5f42a04f2ee5825fd",
+ "lastModified": 1727249100,
+ "narHash": "sha256-2KX8eQtOHKwdq989ybu4fk0FhESTS7KQkvDa+ilYsek=",
+ "owner": "sodiboo",
+ "repo": "niri-flake",
+ "rev": "9d8440b2e3c3eafd15da1b00a41b502e6b4a084e",
"type": "github"
},
"original": {
- "owner": "nixos",
- "ref": "nixos-24.05",
+ "owner": "sodiboo",
+ "repo": "niri-flake",
+ "type": "github"
+ }
+ },
+ "niri-stable": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1726304152,
+ "narHash": "sha256-4YDrKMwXGVOBkeaISbxqf24rLuHvO98TnqxWYfgiSeg=",
+ "owner": "YaLTeR",
+ "repo": "niri",
+ "rev": "6a48728ffb1e638839b07f9ab2f06b2adb41dc61",
+ "type": "github"
+ },
+ "original": {
+ "owner": "YaLTeR",
+ "ref": "v0.1.9",
+ "repo": "niri",
+ "type": "github"
+ }
+ },
+ "niri-unstable": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1726412705,
+ "narHash": "sha256-qRqGbvTpGRn3QhvjOyX0Sn/qPT1bLQUSSHz1vlW/7HE=",
+ "owner": "YaLTeR",
+ "repo": "niri",
+ "rev": "6ee5b5afa784c76b1c31c371b59177136e558fa6",
+ "type": "github"
+ },
+ "original": {
+ "owner": "YaLTeR",
+ "repo": "niri",
+ "type": "github"
+ }
+ },
+ "nixpkgs": {
+ "locked": {
+ "lastModified": 1726937504,
+ "narHash": "sha256-bvGoiQBvponpZh8ClUcmJ6QnsNKw0EMrCQJARK3bI1c=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "9357f4f23713673f310988025d9dc261c20e70c6",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
@@ -53,6 +128,34 @@
"type": "github"
}
},
+ "nixpkgs-lib": {
+ "locked": {
+ "lastModified": 1725233747,
+ "narHash": "sha256-Ss8QWLXdr2JCBPcYChJhz4xJm+h/xjl4G0c0XlP6a74=",
+ "type": "tarball",
+ "url": "https://github.com/NixOS/nixpkgs/archive/356624c12086a18f2ea2825fed34523d60ccc4e3.tar.gz"
+ },
+ "original": {
+ "type": "tarball",
+ "url": "https://github.com/NixOS/nixpkgs/archive/356624c12086a18f2ea2825fed34523d60ccc4e3.tar.gz"
+ }
+ },
+ "nixpkgs-stable": {
+ "locked": {
+ "lastModified": 1727129439,
+ "narHash": "sha256-nPyrcFm6FSk7CxzVW4x2hu62aLDghNcv9dX6DF3dXw8=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "babc25a577c3310cce57c72d5bed70f4c3c3843a",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-24.05",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
"nixpkgs-unstable": {
"locked": {
"lastModified": 1726937504,
@@ -69,6 +172,22 @@
"type": "github"
}
},
+ "nixpkgs_2": {
+ "locked": {
+ "lastModified": 1719426051,
+ "narHash": "sha256-yJL9VYQhaRM7xs0M867ZFxwaONB9T2Q4LnGo1WovuR4=",
+ "owner": "nixos",
+ "repo": "nixpkgs",
+ "rev": "89c49874fb15f4124bf71ca5f42a04f2ee5825fd",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nixos",
+ "ref": "nixos-24.05",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
"nur": {
"locked": {
"lastModified": 1719509062,
@@ -87,11 +206,45 @@
"root": {
"inputs": {
"home-manager": "home-manager",
- "nixpkgs": "nixpkgs",
+ "niri": "niri",
+ "nixpkgs": "nixpkgs_2",
"nixpkgs-23": "nixpkgs-23",
"nixpkgs-unstable": "nixpkgs-unstable",
"nur": "nur"
}
+ },
+ "xwayland-satellite-stable": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1718165778,
+ "narHash": "sha256-dwF9nI54a6Fo9XU5s4qmvMXSgCid3YQVGxch00qEMvI=",
+ "owner": "Supreeeme",
+ "repo": "xwayland-satellite",
+ "rev": "b6d281967cb0b7bf1dfdb8d0f597b517dc4aa5c5",
+ "type": "github"
+ },
+ "original": {
+ "owner": "Supreeeme",
+ "ref": "v0.4",
+ "repo": "xwayland-satellite",
+ "type": "github"
+ }
+ },
+ "xwayland-satellite-unstable": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1726378112,
+ "narHash": "sha256-OANPb73V/RQDqtpIcbzeJ93KuOHKFQv+1xXC44Ut7tY=",
+ "owner": "Supreeeme",
+ "repo": "xwayland-satellite",
+ "rev": "b962a0f33b503aa39c9cf6919f488b664e5b79b4",
+ "type": "github"
+ },
+ "original": {
+ "owner": "Supreeeme",
+ "repo": "xwayland-satellite",
+ "type": "github"
+ }
}
},
"root": "root",
diff --git a/flake.nix b/flake.nix
index 1dde4f8..b85590c 100644
--- a/flake.nix
+++ b/flake.nix
@@ -75,6 +75,24 @@
./jaci/default.nix
];
};
+ scrappy = nixpkgs.lib.nixosSystem {
+ # Pass args to desktop configuration
+ specialArgs = {
+ inherit inputs outputs timeZone system;
+ };
+ modules = [
+ # Setup home manager
+ inputs.home-manager.nixosModules.home-manager {
+ home-manager.useGlobalPkgs = true;
+ home-manager.useUserPackages = true;
+ home-manager.users.scrappy = import ./scrappy/modules/home-manager/home.nix;
+ home-manager.extraSpecialArgs = {
+ inherit inputs outputs unstablePkgs pkgs23;
+ };
+ }
+ ./scrappy/default.nix
+ ];
+ };
};
};
}
diff --git a/scrappy/default.nix b/scrappy/default.nix
new file mode 100644
index 0000000..79322a8
--- /dev/null
+++ b/scrappy/default.nix
@@ -0,0 +1,39 @@
+{ config, lib, inputs, outputs, pkgs, system, timeZone, ... }:
+ let
+ userName = "scrappy";
+ fullName = "Nate Anderson";
+ email = "n8r@tuta.io";
+ hostName = "scrapper";
+ desktop = "hyprland";
+ gaming = true;
+ in
+{
+ imports = [
+ ./desktop-configuration.nix
+ ./hardware-configuration.nix
+ ];
+
+ deskCfg = {
+ userName = userName;
+ hostName = hostName;
+ de = desktop;
+ installGaming = gaming;
+ };
+
+ # Limit the number of generations to keep
+ boot.loader.systemd-boot.configurationLimit = 3;
+
+ # Perform garbage collection weekly to maintain low disk usage
+ nix.gc = {
+ automatic = true;
+ dates = "weekly";
+ options = "--delete-older-than 5d";
+ };
+
+ # 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/scrappy/desktop-configuration.nix b/scrappy/desktop-configuration.nix
new file mode 100644
index 0000000..dfa4aee
--- /dev/null
+++ b/scrappy/desktop-configuration.nix
@@ -0,0 +1,166 @@
+{ config, lib, inputs, outputs, pkgs, timeZone, system, ... }:
+let
+ supportedDesktops = [ "gnome" "hyprland" ];
+ supportedDesktopsStr = lib.strings.concatStringsSep ", " supportedDesktops;
+ deskCfg = config.deskCfg;
+in
+{
+ options.deskCfg = {
+ de = lib.mkOption {
+ default = "";
+ type = lib.types.str;
+ description = "Desktop Environment";
+ };
+ userName = lib.mkOption {
+ type = lib.types.str;
+ description = "Main username for system";
+ };
+ hostName = lib.mkOption {
+ type = lib.types.str;
+ description = "Hostname for system";
+ };
+ installGaming = lib.mkOption {
+ type = lib.types.bool;
+ default = true;
+ description = "Whether to install gaming software or not";
+ };
+ };
+
+ imports = [
+ modules/user/main_user.nix
+ ];
+
+ config = {
+ assertions = [
+ {
+ assertion = builtins.elem deskCfg.de supportedDesktops;
+ message = "Unsupported desktop environment: ${deskCfg.de}\nSupported DE's: ${supportedDesktopsStr}";
+ }
+ ];
+
+ nixpkgs.overlays = [
+ inputs.nur.overlay
+ ];
+
+
+ # Enable flakes feature
+ nix.settings.experimental-features = [
+ "nix-command" "flakes"
+ ];
+
+ # boot.plymouth.enable = true;
+
+ boot = {
+ plymouth = {
+ enable = true;
+ theme = "circle_flow";
+ themePackages = with pkgs; [
+ # By default we would install all themes
+ (adi1090x-plymouth-themes.override {
+ selected_themes = [ "circle_flow" ];
+ })
+ ];
+ };
+
+ # Enable "Silent Boot"
+ consoleLogLevel = 0;
+ initrd.verbose = false;
+ kernelParams = [
+ "quiet"
+ "splash"
+ "boot.shell_on_fail"
+ "loglevel=3"
+ "rd.systemd.show_status=false"
+ "rd.udev.log_level=3"
+ "udev.log_priority=3"
+ ];
+ # Hide the OS choice for bootloaders.
+ # It's still possible to open the bootloader list by pressing any key
+ # It will just not appear on screen unless a key is pressed
+ loader.timeout = 0;
+ # Use the systemd-boot EFI boot loader.
+ loader.systemd-boot.enable = true;
+ loader.efi.canTouchEfiVariables = true;
+ };
+ networking.hostName = deskCfg.hostName; # Define your hostname.
+ networking.networkmanager.enable = true; # Easiest to use and most distros use this by default.
+ networking.wireless.iwd.enable = true;
+
+ time.timeZone = timeZone;
+
+ main_user = {
+ enable = true;
+ userName = deskCfg.userName;
+ isDesktopUser = true;
+ };
+
+ #niriwm = {
+ # enable = false;
+ # useNonFree = true;
+ # #installGaming = deskCfg.installGaming;
+ # systemPackages = with pkgs; [
+ # libreoffice
+ # rpi-imagergh
+ # ];
+ #};
+
+ ## TODO move all of this into a hyprland config
+ environment.systemPackages = with pkgs; [
+ cryptsetup
+ nwg-hello
+ cage
+ ];
+ # Get block UUID with
+ # `sudo blkid /dev/mmcblk1p1`
+ # Makes encrypted device available under /dev/mapper/enc_source
+ environment.etc.crypttab.text = ''
+ enc_source UUID=6e131a4e-1cba-4db7-b635-42381e4fd790 /root/keyfile
+ '';
+ programs.hyprland.enable = true;
+ # programs.steam.enable = true;
+ # For electron apps in wayland
+ environment.sessionVariables.NIXOS_OZONE_WL = "1";
+
+ services.greetd = {
+ enable = true;
+ settings = rec {
+ initial_session = {
+ command = "${pkgs.hyprland}/bin/hyprland";
+ user = "scrappy";
+ };
+ default_session = initial_session;
+ };
+ };
+ # For yubioath desktop
+ services.pcscd.enable = true;
+ # Audio
+ security.rtkit.enable = true;
+ services.pipewire = {
+ enable = true;
+ alsa.enable = true;
+ pulse.enable = true;
+ wireplumber.enable = true;
+ };
+ programs.thunar = {
+ enable = true;
+ plugins = with pkgs.xfce; [
+ thunar-archive-plugin
+ thunar-volman
+ ];
+ };
+ programs.file-roller.enable = true;
+ programs.xfconf.enable = true;
+ # sound.enable = false;
+ # services.xserver = {
+ # enable = true;
+ # displayManager.gdm.enable = true;
+ # desktopManager.gnome.enable = true;
+ # };
+ programs.regreet.enable = true;
+
+ programs.zsh.enable = true;
+ nixpkgs.config.allowUnfree = true;
+ system.stateVersion = "24.05"; # Did you read the comment?
+ };
+}
+
diff --git a/scrappy/dotfiles/Passwords.kdbx b/scrappy/dotfiles/Passwords.kdbx
new file mode 100644
index 0000000..9e3aded
Binary files /dev/null and b/scrappy/dotfiles/Passwords.kdbx differ
diff --git a/scrappy/dotfiles/bat/themes/Catppuccin Macchiato.tmTheme b/scrappy/dotfiles/bat/themes/Catppuccin Macchiato.tmTheme
new file mode 100644
index 0000000..a6af1fe
--- /dev/null
+++ b/scrappy/dotfiles/bat/themes/Catppuccin Macchiato.tmTheme
@@ -0,0 +1,2021 @@
+
+
+
+
+ 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
+ #cad3f512
+ misspelling
+ #ed8796
+ accent
+ #c6a0f6
+ selection
+ #939ab740
+ activeGuide
+ #494d64
+ findHighlight
+ #455c6d
+ gutterForeground
+ #8087a2
+
+
+
+ name
+ Basic text & variable names (incl. leading punctuation)
+ scope
+ text, source, variable.other.readwrite, punctuation.definition.variable
+ settings
+
+ foreground
+ #cad3f5
+
+
+
+ name
+ Parentheses, Brackets, Braces
+ scope
+ punctuation
+ settings
+
+ foreground
+ #939ab7
+ fontStyle
+
+
+
+
+ name
+ Comments
+ scope
+ comment, punctuation.definition.comment
+ settings
+
+ foreground
+ #6e738d
+ fontStyle
+ italic
+
+
+
+ scope
+ string, punctuation.definition.string
+ settings
+
+ foreground
+ #a6da95
+
+
+
+ scope
+ constant.character.escape
+ settings
+
+ foreground
+ #f5bde6
+
+
+
+ name
+ Booleans, constants, numbers
+ scope
+ constant.numeric, variable.other.constant, entity.name.constant, constant.language.boolean, constant.language.false, constant.language.true, keyword.other.unit.user-defined, keyword.other.unit.suffix.floating-point
+ settings
+
+ foreground
+ #f5a97f
+
+
+
+ scope
+ keyword, keyword.operator.word, keyword.operator.new, variable.language.super, support.type.primitive, storage.type, storage.modifier, punctuation.definition.keyword
+ settings
+
+ foreground
+ #c6a0f6
+ fontStyle
+
+
+
+
+ scope
+ entity.name.tag.documentation
+ settings
+
+ foreground
+ #c6a0f6
+
+
+
+ name
+ Punctuation
+ scope
+ keyword.operator, punctuation.accessor, punctuation.definition.generic, meta.function.closure punctuation.section.parameters, punctuation.definition.tag, punctuation.separator.key-value
+ settings
+
+ foreground
+ #8bd5ca
+
+
+
+ scope
+ entity.name.function, meta.function-call.method, support.function, support.function.misc, variable.function
+ settings
+
+ foreground
+ #8aadf4
+ fontStyle
+ italic
+
+
+
+ name
+ Classes
+ scope
+ entity.name.class, entity.other.inherited-class, support.class, meta.function-call.constructor, entity.name.struct
+ settings
+
+ foreground
+ #eed49f
+ fontStyle
+ italic
+
+
+
+ name
+ Enum
+ scope
+ entity.name.enum
+ settings
+
+ foreground
+ #eed49f
+ fontStyle
+ italic
+
+
+
+ name
+ Enum member
+ scope
+ meta.enum variable.other.readwrite, variable.other.enummember
+ settings
+
+ foreground
+ #8bd5ca
+
+
+
+ name
+ Object properties
+ scope
+ meta.property.object
+ settings
+
+ foreground
+ #8bd5ca
+
+
+
+ name
+ Types
+ scope
+ meta.type, meta.type-alias, support.type, entity.name.type
+ settings
+
+ foreground
+ #eed49f
+ fontStyle
+ italic
+
+
+
+ name
+ Decorators
+ scope
+ meta.annotation variable.function, meta.annotation variable.annotation.function, meta.annotation punctuation.definition.annotation, meta.decorator, punctuation.decorator
+ settings
+
+ foreground
+ #f5a97f
+
+
+
+ scope
+ variable.parameter, meta.function.parameters
+ settings
+
+ foreground
+ #ee99a0
+ fontStyle
+ italic
+
+
+
+ name
+ Built-ins
+ scope
+ constant.language, support.function.builtin
+ settings
+
+ foreground
+ #ed8796
+
+
+
+ scope
+ entity.other.attribute-name.documentation
+ settings
+
+ foreground
+ #ed8796
+
+
+
+ name
+ Preprocessor directives
+ scope
+ keyword.control.directive, punctuation.definition.directive
+ settings
+
+ foreground
+ #eed49f
+
+
+
+ name
+ Type parameters
+ scope
+ punctuation.definition.typeparameters
+ settings
+
+ foreground
+ #91d7e3
+
+
+
+ name
+ Namespaces
+ scope
+ entity.name.namespace
+ settings
+
+ foreground
+ #eed49f
+
+
+
+ name
+ Property names (left hand assignments in json/yaml/css)
+ scope
+ support.type.property-name.css
+ settings
+
+ foreground
+ #8aadf4
+ fontStyle
+
+
+
+
+ name
+ This/Self keyword
+ scope
+ variable.language.this, variable.language.this punctuation.definition.variable
+ settings
+
+ foreground
+ #ed8796
+
+
+
+ name
+ Object properties
+ scope
+ variable.object.property
+ settings
+
+ foreground
+ #cad3f5
+
+
+
+ name
+ String template interpolation
+ scope
+ string.template variable, string variable
+ settings
+
+ foreground
+ #cad3f5
+
+
+
+ name
+ `new` as bold
+ scope
+ keyword.operator.new
+ settings
+
+ fontStyle
+ bold
+
+
+
+ name
+ C++ extern keyword
+ scope
+ storage.modifier.specifier.extern.cpp
+ settings
+
+ foreground
+ #c6a0f6
+
+
+
+ name
+ C++ scope resolution
+ scope
+ entity.name.scope-resolution.template.call.cpp, entity.name.scope-resolution.parameter.cpp, entity.name.scope-resolution.cpp, entity.name.scope-resolution.function.definition.cpp
+ settings
+
+ foreground
+ #eed49f
+
+
+
+ name
+ C++ doc keywords
+ scope
+ storage.type.class.doxygen
+ settings
+
+ fontStyle
+
+
+
+
+ name
+ C++ operators
+ scope
+ storage.modifier.reference.cpp
+ settings
+
+ foreground
+ #8bd5ca
+
+
+
+ name
+ C# Interpolated Strings
+ scope
+ meta.interpolation.cs
+ settings
+
+ foreground
+ #cad3f5
+
+
+
+ name
+ C# xml-style docs
+ scope
+ comment.block.documentation.cs
+ settings
+
+ foreground
+ #cad3f5
+
+
+
+ name
+ Classes, reflecting the className color in JSX
+ scope
+ source.css entity.other.attribute-name.class.css, entity.other.attribute-name.parent-selector.css punctuation.definition.entity.css
+ settings
+
+ foreground
+ #eed49f
+
+
+
+ name
+ Operators
+ scope
+ punctuation.separator.operator.css
+ settings
+
+ foreground
+ #8bd5ca
+
+
+
+ name
+ Pseudo classes
+ scope
+ source.css entity.other.attribute-name.pseudo-class
+ settings
+
+ foreground
+ #8bd5ca
+
+
+
+ scope
+ source.css constant.other.unicode-range
+ settings
+
+ foreground
+ #f5a97f
+
+
+
+ scope
+ source.css variable.parameter.url
+ settings
+
+ foreground
+ #a6da95
+ fontStyle
+
+
+
+
+ name
+ CSS vendored property names
+ scope
+ support.type.vendored.property-name
+ settings
+
+ foreground
+ #91d7e3
+
+
+
+ name
+ Less/SCSS right-hand variables (@/$-prefixed)
+ scope
+ source.css meta.property-value variable, source.css meta.property-value variable.other.less, source.css meta.property-value variable.other.less punctuation.definition.variable.less, meta.definition.variable.scss
+ settings
+
+ foreground
+ #ee99a0
+
+
+
+ name
+ CSS variables (--prefixed)
+ scope
+ source.css meta.property-list variable, meta.property-list variable.other.less, meta.property-list variable.other.less punctuation.definition.variable.less
+ settings
+
+ foreground
+ #8aadf4
+
+
+
+ name
+ CSS Percentage values, styled the same as numbers
+ scope
+ keyword.other.unit.percentage.css
+ settings
+
+ foreground
+ #f5a97f
+
+
+
+ name
+ CSS Attribute selectors, styled the same as strings
+ scope
+ source.css meta.attribute-selector
+ settings
+
+ foreground
+ #a6da95
+
+
+
+ name
+ JSON/YAML keys, other left-hand assignments
+ scope
+ keyword.other.definition.ini, punctuation.support.type.property-name.json, support.type.property-name.json, punctuation.support.type.property-name.toml, support.type.property-name.toml, entity.name.tag.yaml, punctuation.support.type.property-name.yaml, support.type.property-name.yaml
+ settings
+
+ foreground
+ #8aadf4
+ fontStyle
+
+
+
+
+ name
+ JSON/YAML constants
+ scope
+ constant.language.json, constant.language.yaml
+ settings
+
+ foreground
+ #f5a97f
+
+
+
+ name
+ YAML anchors
+ scope
+ entity.name.type.anchor.yaml, variable.other.alias.yaml
+ settings
+
+ foreground
+ #eed49f
+ fontStyle
+
+
+
+
+ name
+ TOML tables / ini groups
+ scope
+ support.type.property-name.table, entity.name.section.group-title.ini
+ settings
+
+ foreground
+ #eed49f
+
+
+
+ name
+ TOML dates
+ scope
+ constant.other.time.datetime.offset.toml
+ settings
+
+ foreground
+ #f5bde6
+
+
+
+ name
+ YAML anchor puctuation
+ scope
+ punctuation.definition.anchor.yaml, punctuation.definition.alias.yaml
+ settings
+
+ foreground
+ #f5bde6
+
+
+
+ name
+ YAML triple dashes
+ scope
+ entity.other.document.begin.yaml
+ settings
+
+ foreground
+ #f5bde6
+
+
+
+ name
+ Markup Diff
+ scope
+ markup.changed.diff
+ settings
+
+ foreground
+ #f5a97f
+
+
+
+ name
+ Diff
+ scope
+ meta.diff.header.from-file, meta.diff.header.to-file, punctuation.definition.from-file.diff, punctuation.definition.to-file.diff
+ settings
+
+ foreground
+ #8aadf4
+
+
+
+ name
+ Diff Inserted
+ scope
+ markup.inserted.diff
+ settings
+
+ foreground
+ #a6da95
+
+
+
+ name
+ Diff Deleted
+ scope
+ markup.deleted.diff
+ settings
+
+ foreground
+ #ed8796
+
+
+
+ name
+ dotenv left-hand side assignments
+ scope
+ variable.other.env
+ settings
+
+ foreground
+ #8aadf4
+
+
+
+ name
+ dotenv reference to existing env variable
+ scope
+ string.quoted variable.other.env
+ settings
+
+ foreground
+ #cad3f5
+
+
+
+ name
+ GDScript functions
+ scope
+ support.function.builtin.gdscript
+ settings
+
+ foreground
+ #8aadf4
+
+
+
+ name
+ GDScript constants
+ scope
+ constant.language.gdscript
+ settings
+
+ foreground
+ #f5a97f
+
+
+
+ name
+ Comment keywords
+ scope
+ comment meta.annotation.go
+ settings
+
+ foreground
+ #ee99a0
+
+
+
+ name
+ go:embed, go:build, etc.
+ scope
+ comment meta.annotation.parameters.go
+ settings
+
+ foreground
+ #f5a97f
+
+
+
+ name
+ Go constants (nil, true, false)
+ scope
+ constant.language.go
+ settings
+
+ foreground
+ #f5a97f
+
+
+
+ name
+ GraphQL variables
+ scope
+ variable.graphql
+ settings
+
+ foreground
+ #cad3f5
+
+
+
+ name
+ GraphQL aliases
+ scope
+ string.unquoted.alias.graphql
+ settings
+
+ foreground
+ #f0c6c6
+
+
+
+ name
+ GraphQL enum members
+ scope
+ constant.character.enum.graphql
+ settings
+
+ foreground
+ #8bd5ca
+
+
+
+ name
+ GraphQL field in types
+ scope
+ meta.objectvalues.graphql constant.object.key.graphql string.unquoted.graphql
+ settings
+
+ foreground
+ #f0c6c6
+
+
+
+ name
+ HTML/XML DOCTYPE as keyword
+ scope
+ keyword.other.doctype, meta.tag.sgml.doctype punctuation.definition.tag, meta.tag.metadata.doctype entity.name.tag, meta.tag.metadata.doctype punctuation.definition.tag
+ settings
+
+ foreground
+ #c6a0f6
+
+
+
+ name
+ HTML/XML-like <tags/>
+ scope
+ entity.name.tag
+ settings
+
+ foreground
+ #8aadf4
+ fontStyle
+
+
+
+
+ name
+ Special characters like &
+ scope
+ text.html constant.character.entity, text.html constant.character.entity punctuation, constant.character.entity.xml, constant.character.entity.xml punctuation, constant.character.entity.js.jsx, constant.charactger.entity.js.jsx punctuation, constant.character.entity.tsx, constant.character.entity.tsx punctuation
+ settings
+
+ foreground
+ #ed8796
+
+
+
+ name
+ HTML/XML tag attribute values
+ scope
+ entity.other.attribute-name
+ settings
+
+ foreground
+ #eed49f
+
+
+
+ name
+ Components
+ scope
+ support.class.component, support.class.component.jsx, support.class.component.tsx, support.class.component.vue
+ settings
+
+ foreground
+ #f5bde6
+ fontStyle
+
+
+
+
+ name
+ Annotations
+ scope
+ punctuation.definition.annotation, storage.type.annotation
+ settings
+
+ foreground
+ #f5a97f
+
+
+
+ name
+ Java enums
+ scope
+ constant.other.enum.java
+ settings
+
+ foreground
+ #8bd5ca
+
+
+
+ name
+ Java imports
+ scope
+ storage.modifier.import.java
+ settings
+
+ foreground
+ #cad3f5
+
+
+
+ name
+ Javadoc
+ scope
+ comment.block.javadoc.java keyword.other.documentation.javadoc.java
+ settings
+
+ fontStyle
+
+
+
+
+ name
+ Exported Variable
+ scope
+ meta.export variable.other.readwrite.js
+ settings
+
+ foreground
+ #ee99a0
+
+
+
+ name
+ JS/TS constants & properties
+ scope
+ variable.other.constant.js, variable.other.constant.ts, variable.other.property.js, variable.other.property.ts
+ settings
+
+ foreground
+ #cad3f5
+
+
+
+ name
+ JSDoc; these are mainly params, so styled as such
+ scope
+ variable.other.jsdoc, comment.block.documentation variable.other
+ settings
+
+ foreground
+ #ee99a0
+ fontStyle
+
+
+
+
+ name
+ JSDoc keywords
+ scope
+ storage.type.class.jsdoc
+ settings
+
+ fontStyle
+
+
+
+
+ scope
+ support.type.object.console.js
+ settings
+
+ foreground
+ #cad3f5
+
+
+
+ name
+ Node constants as keywords (module, etc.)
+ scope
+ support.constant.node, support.type.object.module.js
+ settings
+
+ foreground
+ #c6a0f6
+
+
+
+ name
+ implements as keyword
+ scope
+ storage.modifier.implements
+ settings
+
+ foreground
+ #c6a0f6
+
+
+
+ name
+ Builtin types
+ scope
+ constant.language.null.js, constant.language.null.ts, constant.language.undefined.js, constant.language.undefined.ts, support.type.builtin.ts
+ settings
+
+ foreground
+ #c6a0f6
+
+
+
+ scope
+ variable.parameter.generic
+ settings
+
+ foreground
+ #eed49f
+
+
+
+ name
+ Arrow functions
+ scope
+ keyword.declaration.function.arrow.js, storage.type.function.arrow.ts
+ settings
+
+ foreground
+ #8bd5ca
+
+
+
+ name
+ Decorator punctuations (decorators inherit from blue functions, instead of styleguide peach)
+ scope
+ punctuation.decorator.ts
+ settings
+
+ foreground
+ #8aadf4
+ fontStyle
+ italic
+
+
+
+ name
+ Extra JS/TS keywords
+ scope
+ keyword.operator.expression.in.js, keyword.operator.expression.in.ts, keyword.operator.expression.infer.ts, keyword.operator.expression.instanceof.js, keyword.operator.expression.instanceof.ts, keyword.operator.expression.is, keyword.operator.expression.keyof.ts, keyword.operator.expression.of.js, keyword.operator.expression.of.ts, keyword.operator.expression.typeof.ts
+ settings
+
+ foreground
+ #c6a0f6
+
+
+
+ name
+ Julia macros
+ scope
+ support.function.macro.julia
+ settings
+
+ foreground
+ #8bd5ca
+ fontStyle
+ italic
+
+
+
+ name
+ Julia language constants (true, false)
+ scope
+ constant.language.julia
+ settings
+
+ foreground
+ #f5a97f
+
+
+
+ name
+ Julia other constants (these seem to be arguments inside arrays)
+ scope
+ constant.other.symbol.julia
+ settings
+
+ foreground
+ #ee99a0
+
+
+
+ name
+ LaTeX preamble
+ scope
+ text.tex keyword.control.preamble
+ settings
+
+ foreground
+ #8bd5ca
+
+
+
+ name
+ LaTeX be functions
+ scope
+ text.tex support.function.be
+ settings
+
+ foreground
+ #91d7e3
+
+
+
+ name
+ LaTeX math
+ scope
+ constant.other.general.math.tex
+ settings
+
+ foreground
+ #f0c6c6
+
+
+
+ name
+ Lua docstring keywords
+ scope
+ comment.line.double-dash.documentation.lua storage.type.annotation.lua
+ settings
+
+ foreground
+ #c6a0f6
+ fontStyle
+
+
+
+
+ name
+ Lua docstring variables
+ scope
+ comment.line.double-dash.documentation.lua entity.name.variable.lua, comment.line.double-dash.documentation.lua variable.lua
+ settings
+
+ foreground
+ #cad3f5
+
+
+
+ scope
+ heading.1.markdown punctuation.definition.heading.markdown, heading.1.markdown, markup.heading.atx.1.mdx, markup.heading.atx.1.mdx punctuation.definition.heading.mdx, markup.heading.setext.1.markdown, markup.heading.heading-0.asciidoc
+ settings
+
+ foreground
+ #ed8796
+
+
+
+ scope
+ heading.2.markdown punctuation.definition.heading.markdown, heading.2.markdown, markup.heading.atx.2.mdx, markup.heading.atx.2.mdx punctuation.definition.heading.mdx, markup.heading.setext.2.markdown, markup.heading.heading-1.asciidoc
+ settings
+
+ foreground
+ #f5a97f
+
+
+
+ scope
+ heading.3.markdown punctuation.definition.heading.markdown, heading.3.markdown, markup.heading.atx.3.mdx, markup.heading.atx.3.mdx punctuation.definition.heading.mdx, markup.heading.heading-2.asciidoc
+ settings
+
+ foreground
+ #eed49f
+
+
+
+ scope
+ heading.4.markdown punctuation.definition.heading.markdown, heading.4.markdown, markup.heading.atx.4.mdx, markup.heading.atx.4.mdx punctuation.definition.heading.mdx, markup.heading.heading-3.asciidoc
+ settings
+
+ foreground
+ #a6da95
+
+
+
+ scope
+ heading.5.markdown punctuation.definition.heading.markdown, heading.5.markdown, markup.heading.atx.5.mdx, markup.heading.atx.5.mdx punctuation.definition.heading.mdx, markup.heading.heading-4.asciidoc
+ settings
+
+ foreground
+ #8aadf4
+
+
+
+ scope
+ heading.6.markdown punctuation.definition.heading.markdown, heading.6.markdown, markup.heading.atx.6.mdx, markup.heading.atx.6.mdx punctuation.definition.heading.mdx, markup.heading.heading-5.asciidoc
+ settings
+
+ foreground
+ #c6a0f6
+
+
+
+ scope
+ markup.bold
+ settings
+
+ foreground
+ #ed8796
+ fontStyle
+ bold
+
+
+
+ scope
+ markup.italic
+ settings
+
+ foreground
+ #ed8796
+ fontStyle
+ italic
+
+
+
+ scope
+ markup.strikethrough
+ settings
+
+ foreground
+ #a5adcb
+ fontStyle
+ strikethrough
+
+
+
+ name
+ Markdown auto links
+ scope
+ punctuation.definition.link, markup.underline.link
+ settings
+
+ foreground
+ #8aadf4
+
+
+
+ name
+ Markdown links
+ scope
+ text.html.markdown punctuation.definition.link.title, string.other.link.title.markdown, markup.link, punctuation.definition.constant.markdown, constant.other.reference.link.markdown, markup.substitution.attribute-reference
+ settings
+
+ foreground
+ #b7bdf8
+
+
+
+ name
+ Markdown code spans
+ scope
+ punctuation.definition.raw.markdown, markup.inline.raw.string.markdown, markup.raw.block.markdown
+ settings
+
+ foreground
+ #a6da95
+
+
+
+ name
+ Markdown triple backtick language identifier
+ scope
+ fenced_code.block.language
+ settings
+
+ foreground
+ #91d7e3
+
+
+
+ name
+ Markdown triple backticks
+ scope
+ markup.fenced_code.block punctuation.definition, markup.raw support.asciidoc
+ settings
+
+ foreground
+ #939ab7
+
+
+
+ name
+ Markdown quotes
+ scope
+ markup.quote, punctuation.definition.quote.begin
+ settings
+
+ foreground
+ #f5bde6
+
+
+
+ name
+ Markdown separators
+ scope
+ meta.separator.markdown
+ settings
+
+ foreground
+ #8bd5ca
+
+
+
+ name
+ Markdown list bullets
+ scope
+ punctuation.definition.list.begin.markdown, markup.list.bullet
+ settings
+
+ foreground
+ #8bd5ca
+
+
+
+ name
+ Nix attribute names
+ scope
+ entity.other.attribute-name.multipart.nix, entity.other.attribute-name.single.nix
+ settings
+
+ foreground
+ #8aadf4
+
+
+
+ name
+ Nix parameter names
+ scope
+ variable.parameter.name.nix
+ settings
+
+ foreground
+ #cad3f5
+ fontStyle
+
+
+
+
+ name
+ Nix interpolated parameter names
+ scope
+ meta.embedded variable.parameter.name.nix
+ settings
+
+ foreground
+ #b7bdf8
+ fontStyle
+
+
+
+
+ name
+ Nix paths
+ scope
+ string.unquoted.path.nix
+ settings
+
+ foreground
+ #f5bde6
+ fontStyle
+
+
+
+
+ name
+ PHP Attributes
+ scope
+ support.attribute.builtin, meta.attribute.php
+ settings
+
+ foreground
+ #eed49f
+
+
+
+ name
+ PHP Parameters (needed for the leading dollar sign)
+ scope
+ meta.function.parameters.php punctuation.definition.variable.php
+ settings
+
+ foreground
+ #ee99a0
+
+
+
+ name
+ PHP Constants (null, __FILE__, etc.)
+ scope
+ constant.language.php
+ settings
+
+ foreground
+ #c6a0f6
+
+
+
+ name
+ PHP functions
+ scope
+ text.html.php support.function
+ settings
+
+ foreground
+ #91d7e3
+
+
+
+ name
+ PHPdoc keywords
+ scope
+ keyword.other.phpdoc.php
+ settings
+
+ fontStyle
+
+
+
+
+ name
+ Python argument functions reset to text, otherwise they inherit blue from function-call
+ scope
+ support.variable.magic.python, meta.function-call.arguments.python
+ settings
+
+ foreground
+ #cad3f5
+
+
+
+ name
+ Python double underscore functions
+ scope
+ support.function.magic.python
+ settings
+
+ foreground
+ #91d7e3
+ fontStyle
+ italic
+
+
+
+ name
+ Python `self` keyword
+ scope
+ variable.parameter.function.language.special.self.python, variable.language.special.self.python
+ settings
+
+ foreground
+ #ed8796
+ fontStyle
+ italic
+
+
+
+ name
+ python keyword flow/logical (for ... in)
+ scope
+ keyword.control.flow.python, keyword.operator.logical.python
+ settings
+
+ foreground
+ #c6a0f6
+
+
+
+ name
+ python storage type
+ scope
+ storage.type.function.python
+ settings
+
+ foreground
+ #c6a0f6
+
+
+
+ name
+ python function support
+ scope
+ support.token.decorator.python, meta.function.decorator.identifier.python
+ settings
+
+ foreground
+ #91d7e3
+
+
+
+ name
+ python function calls
+ scope
+ meta.function-call.python
+ settings
+
+ foreground
+ #8aadf4
+
+
+
+ name
+ python function decorators
+ scope
+ entity.name.function.decorator.python, punctuation.definition.decorator.python
+ settings
+
+ foreground
+ #f5a97f
+ fontStyle
+ italic
+
+
+
+ name
+ python placeholder reset to normal string
+ scope
+ constant.character.format.placeholder.other.python
+ settings
+
+ foreground
+ #f5bde6
+
+
+
+ name
+ Python exception & builtins such as exit()
+ scope
+ support.type.exception.python, support.function.builtin.python
+ settings
+
+ foreground
+ #f5a97f
+
+
+
+ name
+ entity.name.type
+ scope
+ support.type.python
+ settings
+
+ foreground
+ #f5a97f
+
+
+
+ name
+ python constants (True/False)
+ scope
+ constant.language.python
+ settings
+
+ foreground
+ #c6a0f6
+
+
+
+ name
+ Arguments accessed later in the function body
+ scope
+ meta.indexed-name.python, meta.item-access.python
+ settings
+
+ foreground
+ #ee99a0
+ fontStyle
+ italic
+
+
+
+ name
+ Python f-strings/binary/unicode storage types
+ scope
+ storage.type.string.python
+ settings
+
+ foreground
+ #a6da95
+ fontStyle
+ italic
+
+
+
+ name
+ Python type hints
+ scope
+ meta.function.parameters.python
+ settings
+
+ fontStyle
+
+
+
+
+ name
+ Regex string begin/end in JS/TS
+ scope
+ string.regexp punctuation.definition.string.begin, string.regexp punctuation.definition.string.end
+ settings
+
+ foreground
+ #f5bde6
+
+
+
+ name
+ Regex anchors (^, $)
+ scope
+ keyword.control.anchor.regexp
+ settings
+
+ foreground
+ #c6a0f6
+
+
+
+ name
+ Regex regular string match
+ scope
+ string.regexp.ts
+ settings
+
+ foreground
+ #cad3f5
+
+
+
+ name
+ Regex group parenthesis & backreference (\1, \2, \3, ...)
+ scope
+ punctuation.definition.group.regexp, keyword.other.back-reference.regexp
+ settings
+
+ foreground
+ #a6da95
+
+
+
+ name
+ Regex character class []
+ scope
+ punctuation.definition.character-class.regexp
+ settings
+
+ foreground
+ #eed49f
+
+
+
+ name
+ Regex character classes (\d, \w, \s)
+ scope
+ constant.other.character-class.regexp
+ settings
+
+ foreground
+ #f5bde6
+
+
+
+ name
+ Regex range
+ scope
+ constant.other.character-class.range.regexp
+ settings
+
+ foreground
+ #f4dbd6
+
+
+
+ name
+ Regex quantifier
+ scope
+ keyword.operator.quantifier.regexp
+ settings
+
+ foreground
+ #8bd5ca
+
+
+
+ name
+ Regex constant/numeric
+ scope
+ constant.character.numeric.regexp
+ settings
+
+ foreground
+ #f5a97f
+
+
+
+ name
+ Regex lookaheads, negative lookaheads, lookbehinds, negative lookbehinds
+ scope
+ punctuation.definition.group.no-capture.regexp, meta.assertion.look-ahead.regexp, meta.assertion.negative-look-ahead.regexp
+ settings
+
+ foreground
+ #8aadf4
+
+
+
+ name
+ Rust attribute
+ scope
+ meta.annotation.rust, meta.annotation.rust punctuation, meta.attribute.rust, punctuation.definition.attribute.rust
+ settings
+
+ foreground
+ #eed49f
+ fontStyle
+ italic
+
+
+
+ name
+ Rust attribute strings
+ scope
+ meta.attribute.rust string.quoted.double.rust, meta.attribute.rust string.quoted.single.char.rust
+ settings
+
+ fontStyle
+
+
+
+
+ name
+ Rust keyword
+ scope
+ entity.name.function.macro.rules.rust, storage.type.module.rust, storage.modifier.rust, storage.type.struct.rust, storage.type.enum.rust, storage.type.trait.rust, storage.type.union.rust, storage.type.impl.rust, storage.type.rust, storage.type.function.rust, storage.type.type.rust
+ settings
+
+ foreground
+ #c6a0f6
+ fontStyle
+
+
+
+
+ name
+ Rust u/i32, u/i64, etc.
+ scope
+ entity.name.type.numeric.rust
+ settings
+
+ foreground
+ #c6a0f6
+ fontStyle
+
+
+
+
+ name
+ Rust generic
+ scope
+ meta.generic.rust
+ settings
+
+ foreground
+ #f5a97f
+
+
+
+ name
+ Rust impl
+ scope
+ entity.name.impl.rust
+ settings
+
+ foreground
+ #eed49f
+ fontStyle
+ italic
+
+
+
+ name
+ Rust module
+ scope
+ entity.name.module.rust
+ settings
+
+ foreground
+ #f5a97f
+
+
+
+ name
+ Rust trait
+ scope
+ entity.name.trait.rust
+ settings
+
+ foreground
+ #eed49f
+ fontStyle
+ italic
+
+
+
+ name
+ Rust struct
+ scope
+ storage.type.source.rust
+ settings
+
+ foreground
+ #eed49f
+
+
+
+ name
+ Rust union
+ scope
+ entity.name.union.rust
+ settings
+
+ foreground
+ #eed49f
+
+
+
+ name
+ Rust enum member
+ scope
+ meta.enum.rust storage.type.source.rust
+ settings
+
+ foreground
+ #8bd5ca
+
+
+
+ name
+ Rust macro
+ scope
+ support.macro.rust, meta.macro.rust support.function.rust, entity.name.function.macro.rust
+ settings
+
+ foreground
+ #8aadf4
+ fontStyle
+ italic
+
+
+
+ name
+ Rust lifetime
+ scope
+ storage.modifier.lifetime.rust, entity.name.type.lifetime
+ settings
+
+ foreground
+ #8aadf4
+ fontStyle
+ italic
+
+
+
+ name
+ Rust string formatting
+ scope
+ string.quoted.double.rust constant.other.placeholder.rust
+ settings
+
+ foreground
+ #f5bde6
+
+
+
+ name
+ Rust return type generic
+ scope
+ meta.function.return-type.rust meta.generic.rust storage.type.rust
+ settings
+
+ foreground
+ #cad3f5
+
+
+
+ name
+ Rust functions
+ scope
+ meta.function.call.rust
+ settings
+
+ foreground
+ #8aadf4
+
+
+
+ name
+ Rust angle brackets
+ scope
+ punctuation.brackets.angle.rust
+ settings
+
+ foreground
+ #91d7e3
+
+
+
+ name
+ Rust constants
+ scope
+ constant.other.caps.rust
+ settings
+
+ foreground
+ #f5a97f
+
+
+
+ name
+ Rust function parameters
+ scope
+ meta.function.definition.rust variable.other.rust
+ settings
+
+ foreground
+ #ee99a0
+
+
+
+ name
+ Rust closure variables
+ scope
+ meta.function.call.rust variable.other.rust
+ settings
+
+ foreground
+ #cad3f5
+
+
+
+ name
+ Rust self
+ scope
+ variable.language.self.rust
+ settings
+
+ foreground
+ #ed8796
+
+
+
+ name
+ Rust metavariable names
+ scope
+ variable.other.metavariable.name.rust, meta.macro.metavariable.rust keyword.operator.macro.dollar.rust
+ settings
+
+ foreground
+ #f5bde6
+
+
+
+ name
+ Shell shebang
+ scope
+ comment.line.shebang, comment.line.shebang punctuation.definition.comment, comment.line.shebang, punctuation.definition.comment.shebang.shell, meta.shebang.shell
+ settings
+
+ foreground
+ #f5bde6
+ fontStyle
+ italic
+
+
+
+ name
+ Shell shebang command
+ scope
+ comment.line.shebang constant.language
+ settings
+
+ foreground
+ #8bd5ca
+ fontStyle
+ italic
+
+
+
+ name
+ Shell interpolated command
+ scope
+ meta.function-call.arguments.shell punctuation.definition.variable.shell, meta.function-call.arguments.shell punctuation.section.interpolation, meta.function-call.arguments.shell punctuation.definition.variable.shell, meta.function-call.arguments.shell punctuation.section.interpolation
+ settings
+
+ foreground
+ #ed8796
+
+
+
+ name
+ Shell interpolated command variable
+ scope
+ meta.string meta.interpolation.parameter.shell variable.other.readwrite
+ settings
+
+ foreground
+ #f5a97f
+ fontStyle
+ italic
+
+
+
+ scope
+ source.shell punctuation.section.interpolation, punctuation.definition.evaluation.backticks.shell
+ settings
+
+ foreground
+ #8bd5ca
+
+
+
+ name
+ Shell EOF
+ scope
+ entity.name.tag.heredoc.shell
+ settings
+
+ foreground
+ #c6a0f6
+
+
+
+ name
+ Shell quoted variable
+ scope
+ string.quoted.double.shell variable.other.normal.shell
+ settings
+
+ foreground
+ #cad3f5
+
+
+
+ scope
+ markup.heading.synopsis.man, markup.heading.title.man, markup.heading.other.man, markup.heading.env.man
+ settings
+
+ foreground
+ #c6a0f6
+
+
+
+ scope
+ markup.heading.commands.man
+ settings
+
+ foreground
+ #8aadf4
+
+
+
+ scope
+ markup.heading.env.man
+ settings
+
+ foreground
+ #f5bde6
+
+
+
+
+
diff --git a/scrappy/dotfiles/foot/foot.ini b/scrappy/dotfiles/foot/foot.ini
new file mode 100644
index 0000000..cbff81e
--- /dev/null
+++ b/scrappy/dotfiles/foot/foot.ini
@@ -0,0 +1,46 @@
+[main]
+font=Hurmit Nerd Font Mono:size=12
+notify=yes
+
+selection-target=clipboard
+
+[colors]
+# Catpuccin Machiatto theme
+foreground=cad3f5 # Text
+background=24273a # Base
+regular0=494d64 # Surface 1
+regular1=ed8796 # red
+regular2=a6da95 # green
+regular3=eed49f # yellow
+regular4=8aadf4 # blue
+regular5=f5bde6 # pink
+regular6=8bd5ca # teal
+regular7=b8c0e0 # Subtext 1
+bright0=5b6078 # Surface 2
+bright1=ed8796 # red
+bright2=a6da95 # green
+bright3=eed49f # yellow
+bright4=8aadf4 # blue
+bright5=f5bde6 # pink
+bright6=8bd5ca # teal
+bright7=a5adcb # Subtext 0foreground=cdd6f4 # Text
+
+# [colors]
+# Catpuccin Mocha theme colors
+# background=1e1e2e # Base
+# regular0=45475a # Surface 1
+# regular1=f38ba8 # red
+# regular2=a6e3a1 # green
+# regular3=f9e2af # yellow
+# regular4=89b4fa # blue
+# regular5=f5c2e7 # pink
+# regular6=94e2d5 # teal
+# regular7=bac2de # Subtext 1
+# bright0=585b70 # Surface 2
+# bright1=f38ba8 # red
+# bright2=a6e3a1 # green
+# bright3=f9e2af # yellow
+# bright4=89b4fa # blue
+# bright5=f5c2e7 # pink
+# bright6=94e2d5 # teal
+# bright7=a6adc8 # Subtext 0
diff --git a/scrappy/dotfiles/helix/config.toml b/scrappy/dotfiles/helix/config.toml
new file mode 100644
index 0000000..a831afd
--- /dev/null
+++ b/scrappy/dotfiles/helix/config.toml
@@ -0,0 +1,169 @@
+# Theme
+theme = "catppuccin_macchiato"
+
+[keys.normal]
+
+# Navigation
+n = "move_char_left" # Maps the 'a' key to the move_char_left command
+i = "move_visual_line_down"
+e = "move_visual_line_up"
+o = "move_char_right"
+
+I = "page_down"
+E = "page_up"
+
+# Modes
+h = "insert_mode"
+H = "insert_at_line_start"
+l = "open_below"
+L = "open_above"
+
+# Search
+k = "search_next"
+K = "search_prev"
+
+# Selection
+C-s = "split_selection_on_newline"
+C-minus = "merge_selections"
+C-_ = "merge_consecutive_selections"
+"C-;" = "flip_selections"
+"C-:" = "ensure_selections_forward"
+"C-," = "remove_primary_selection"
+C-c = "change_selection_noyank"
+C-d = "delete_selection_noyank"
+"C-(" = "rotate_selection_contents_backward"
+"C-)" = "rotate_selection_contents_forward"
+C-x = "shrink_to_line_bounds"
+C-J = "join_selections_space"
+C-K = "remove_selections"
+C-o = "expand_selection"
+C-i = "shrink_selection"
+C-p = "select_prev_sibling"
+C-n = "select_next_sibling"
+
+# Misc
+"C-/" = "toggle_comments"
+
+[keys.normal."C-space"]
+x = ":wbc!"
+s = ":w!" # save file
+o = ":config-open"
+
+[keys.normal.g]
+"/" = "goto_next_buffer"
+h = "goto_previous_buffer"
+n = ["collapse_selection", "extend_to_line_start"]
+o = ["collapse_selection", "extend_to_line_end"]
+e = "move_line_up"
+i = "move_line_down"
+l = "goto_last_line"
+
+p = "no_op"
+k = "no_op"
+j = "no_op"
+
+[keys.normal.m]
+m = ["select_mode", "match_brackets", "normal_mode"]
+
+[keys.select]
+n = "extend_char_left"
+i = "extend_line_down"
+e = "extend_line_up"
+o = "extend_char_right"
+
+[keys.select.g]
+"/" = "goto_next_buffer"
+h = "goto_previous_buffer"
+n = "goto_line_start"
+o = "goto_line_end"
+e = "move_line_up"
+i = "move_line_down"
+l = "goto_last_line"
+
+p = "no_op"
+k = "no_op"
+j = "no_op"
+
+# Window mode
+[keys.normal."C-w"]
+h = "hsplit"
+C-h = "hsplit"
+n = "jump_view_left"
+C-n = "jump_view_left"
+i = "jump_view_down"
+I = "swap_view_down"
+C-i = "jump_view_down"
+e = "jump_view_up"
+E = "swap_view_up"
+C-e = "jump_view_up"
+o = "jump_view_right"
+O = "swap_view_right"
+C-o = "jump_view_right"
+
+# Remove old
+s = "no_op"
+C-s = "no_op"
+H = "no_op"
+j = "no_op"
+J = "no_op"
+C-j = "no_op"
+k = "no_op"
+K = "no_op"
+C-k = "no_op"
+l = "no_op"
+L = "no_op"
+C-l = "no_op"
+
+[keys.normal."space"]
+h = "hover"
+k = "select_references_to_symbol_under_cursor"
+
+[editor]
+bufferline = "always"
+auto-save = true
+line-number = "relative"
+cursorline = true
+cursorcolumn = true
+color-modes = true
+text-width = 120
+auto-format = true
+
+[editor.statusline]
+left = ["mode", "spinner", "version-control"]
+center = ["file-name"]
+mode.normal = "Normal"
+mode.insert = "Insert"
+mode.select = "Select"
+
+[editor.indent-guides]
+render = true
+
+[editor.lsp]
+display-messages = true
+display-inlay-hints = false
+
+[editor.cursor-shape]
+insert = "bar"
+normal = "block"
+select = "underline"
+
+[editor.file-picker]
+hidden = false
+
+[editor.whitespace.render]
+space = "all"
+tab = "all"
+tabpad = "all"
+newline = "none"
+nbsp = "none"
+
+[editor.whitespace.characters]
+space = "·"
+tab = "⇀"
+tabpad = " "
+
+
+#w = "move_line_up" # Maps the 'w' key move_line_up
+#"C-S-esc" = "extend_line" # Maps Ctrl-Shift-Escape to extend_line
+#g = { a = "code_action" } # Maps `ga` to show possible code actions
+#"ret" = ["open_below", "normal_mode"] # Maps the enter key to open_below then re-enter normal mode
diff --git a/scrappy/dotfiles/helix/languages.toml b/scrappy/dotfiles/helix/languages.toml
new file mode 100644
index 0000000..36f844b
--- /dev/null
+++ b/scrappy/dotfiles/helix/languages.toml
@@ -0,0 +1,4 @@
+# Change dart format to 120 lines
+[[language]]
+name = "dart"
+formatter = {command = "dart", args = ["format", "-l", "120"]}
diff --git a/scrappy/dotfiles/hypr/nix.png b/scrappy/dotfiles/hypr/nix.png
new file mode 100644
index 0000000..ccb261e
Binary files /dev/null and b/scrappy/dotfiles/hypr/nix.png differ
diff --git a/scrappy/dotfiles/kak-lsp/kak-lsp.toml b/scrappy/dotfiles/kak-lsp/kak-lsp.toml
new file mode 100644
index 0000000..d6a78c1
--- /dev/null
+++ b/scrappy/dotfiles/kak-lsp/kak-lsp.toml
@@ -0,0 +1,447 @@
+snippet_support = true
+verbosity = 2
+
+[server]
+# exit session if no requests were received during given period in seconds
+# set to 0 to disable
+timeout = 1800 # seconds = 30 minutes
+
+[language.bash]
+filetypes = ["sh"]
+roots = [".git", ".hg"]
+command = "bash-language-server"
+args = ["start"]
+
+[language.c_cpp]
+filetypes = ["c", "cpp"]
+roots = ["compile_commands.json", ".clangd", ".git", ".hg"]
+command = "clangd"
+
+[language.clojure]
+filetypes = ["clojure"]
+roots = ["project.clj", ".git", ".hg"]
+command = "clojure-lsp"
+settings_section = "_"
+[language.clojure.settings._]
+# See https://clojure-lsp.io/settings/#all-settings
+# source-paths-ignore-regex = ["resources.*", "target.*"]
+
+[language.cmake]
+filetypes = ["cmake"]
+roots = ["CMakeLists.txt", ".git", ".hg"]
+command = "cmake-language-server"
+
+[language.crystal]
+filetypes = ["crystal"]
+roots = ["shard.yml"]
+command = "crystalline"
+
+[language.css]
+filetypes = ["css"]
+roots = ["package.json", ".git", ".hg"]
+command = "vscode-css-languageserver"
+args = ["--stdio"]
+
+[language.less]
+filetypes = ["less"]
+roots = ["package.json", ".git", ".hg"]
+command = "vscode-css-languageserver"
+args = ["--stdio"]
+
+[language.scss]
+filetypes = ["scss"]
+roots = ["package.json", ".git", ".hg"]
+command = "vscode-css-languageserver"
+args = ["--stdio"]
+
+[language.d]
+filetypes = ["d", "di"]
+roots = [".git", "dub.sdl", "dub.json"]
+command = "dls"
+
+[language.dart]
+# start shell to find path to dart analysis server source
+filetypes = ["dart"]
+roots = ["pubspec.yaml", ".git", ".hg"]
+command = "dart"
+args = ["language-server"]
+[language.dart.settings.dart]
+lineLength = 120
+
+[language.elixir]
+filetypes = ["elixir"]
+roots = ["mix.exs"]
+command = "elixir-ls"
+settings_section = "elixirLS"
+[language.elixir.settings.elixirLS]
+# See https://github.com/elixir-lsp/elixir-ls/blob/master/apps/language_server/lib/language_server/server.ex
+# dialyzerEnable = true
+
+[language.elm]
+filetypes = ["elm"]
+roots = ["elm.json"]
+command = "elm-language-server"
+args = ["--stdio"]
+settings_section = "elmLS"
+[language.elm.settings.elmLS]
+# See https://github.com/elm-tooling/elm-language-server#server-settings
+runtime = "node"
+elmPath = "elm"
+elmFormatPath = "elm-format"
+elmTestPath = "elm-test"
+
+[language.elvish]
+filetypes = ["elvish"]
+roots = [".git", ".hg"]
+command = "elvish"
+args = ["-lsp"]
+
+[language.erlang]
+filetypes = ["erlang"]
+# See https://github.com/erlang-ls/erlang_ls.git for more information and
+# how to configure. This default config should work in most cases though.
+roots = ["rebar.config", "erlang.mk", ".git", ".hg"]
+command = "erlang_ls"
+
+[language.go]
+filetypes = ["go"]
+roots = ["Gopkg.toml", "go.mod", ".git", ".hg"]
+command = "gopls"
+settings_section = "gopls"
+[language.go.settings.gopls]
+# See https://github.com/golang/tools/blob/master/gopls/doc/settings.md
+# "build.buildFlags" = []
+
+[language.haskell]
+filetypes = ["haskell"]
+roots = ["hie.yaml", "cabal.project", "Setup.hs", "stack.yaml", "*.cabal"]
+command = "haskell-language-server-wrapper"
+args = ["--lsp"]
+settings_section = "_"
+[language.haskell.settings._]
+# See https://haskell-language-server.readthedocs.io/en/latest/configuration.html
+# haskell.formattingProvider = "ormolu"
+
+[language.html]
+filetypes = ["html"]
+roots = ["package.json"]
+command = "vscode-html-languageserver"
+args = ["--stdio"]
+
+# # Commented out by default because you still need to set the paths in the JDT
+# # Language Server arguments below before this can become a valid configuration.
+# [language.java]
+# filetypes = ["java"]
+# roots = [".git", "mvnw", "gradlew"]
+# command = "java"
+# args = [
+# "-Declipse.application=org.eclipse.jdt.ls.core.id1",
+# "-Dosgi.bundles.defaultStartLevel=4",
+# "-Declipse.product=org.eclipse.jdt.ls.core.product",
+# "-Dlog.level=ALL",
+# "-Dfile.encoding=utf-8",
+# "--add-modules=ALL-SYSTEM",
+# "--add-opens",
+# "java.base/java.util=ALL-UNNAMED",
+# "--add-opens",
+# "java.base/java.lang=ALL-UNNAMED",
+# "-noverify",
+# "-Xmx1G",
+# "-jar",
+# "/path/to/eclipse.jdt.ls/repository/plugins/org.eclipse.equinox.launcher_1.6.100.v20201223-0822.jar",
+# "-configuration",
+# "/path/to/eclipse.jdt.ls/repository/config_linux",
+# "-data",
+# "/path/to/eclipse-workspace",
+# ]
+# [language.java.settings]
+# # See https://github.dev/eclipse/eclipse.jdt.ls
+# # "java.format.insertSpaces" = true
+
+[language.javascriptreact]
+filetypes = ["javascript"]
+roots = ["package.json", "tsconfig.json", ".git", ".hg"]
+command = "typescript-language-server"
+args = ["--stdio"]
+settings_section = "_"
+[language.javascriptreact.settings._]
+# quotePreference = "single"
+# javascript.format.semicolons = "insert"
+
+[language.json]
+filetypes = ["json"]
+roots = ["package.json"]
+command = "vscode-json-language-server"
+args = ["--stdio"]
+
+# Requires Julia package "LanguageServer"
+# Run: `julia --project=@kak-lsp -e 'import Pkg; Pkg.add("LanguageServer")'` to install it
+# Configuration adapted from https://github.com/neovim/nvim-lspconfig/blob/bcebfac7429cd8234960197dca8de1767f3ef5d3/lua/lspconfig/julials.lua
+[language.julia]
+filetypes = ["julia"]
+roots = ["Project.toml", ".git", ".hg"]
+command = "julia"
+args = [
+ "--startup-file=no",
+ "--history-file=no",
+ "-e",
+ """
+ ls_install_path = joinpath(get(DEPOT_PATH, 1, joinpath(homedir(), ".julia")), "environments", "kak-lsp");
+ pushfirst!(LOAD_PATH, ls_install_path);
+ using LanguageServer;
+ popfirst!(LOAD_PATH);
+ depot_path = get(ENV, "JULIA_DEPOT_PATH", "");
+ buffer_file = ENV["kak_buffile"];
+ project_path = let
+ dirname(something(
+ # 1. Check if there is an explicitly set project
+ Base.load_path_expand((
+ p = get(ENV, "JULIA_PROJECT", nothing);
+ p === nothing ? nothing : isempty(p) ? nothing : p
+ )),
+ # 2. Check for Project.toml in current working directory
+ Base.current_project(pwd()),
+ # 3. Check for Project.toml from buffer's full file path excluding the file name
+ Base.current_project(dirname(buffer_file)),
+ # 4. Fallback to global environment
+ Base.active_project()
+ ))
+ end
+ server = LanguageServer.LanguageServerInstance(stdin, stdout, project_path, depot_path);
+ server.runlinter = true;
+ run(server);
+ """,
+]
+[language.julia.settings]
+# See https://github.com/julia-vscode/LanguageServer.jl/blob/master/src/requests/workspace.jl
+# Format options. See https://github.com/julia-vscode/DocumentFormat.jl/blob/master/src/DocumentFormat.jl
+# "julia.format.indent" = 4
+# Lint options. See https://github.com/julia-vscode/StaticLint.jl/blob/master/src/linting/checks.jl
+# "julia.lint.call" = true
+# Other options, see https://github.com/julia-vscode/LanguageServer.jl/blob/master/src/requests/workspace.jl
+# "julia.lint.run" = "true"
+
+[language.latex]
+filetypes = ["latex"]
+roots = [".git", ".hg"]
+command = "texlab"
+settings_section = "texlab"
+[language.latex.settings.texlab]
+# See https://github.com/latex-lsp/texlab/wiki/Configuration
+#
+# Preview configuration for zathura with SyncTeX search.
+# For other PDF viewers see https://github.com/latex-lsp/texlab/wiki/Previewing
+forwardSearch.executable = "zathura"
+forwardSearch.args = [
+ "%p",
+ "--synctex-forward", # Support texlab-forward-search
+ "%l:1:%f",
+ "--synctex-editor-command", # Inverse search: use Control+Left-Mouse-Button to jump to source.
+ """
+ sh -c '
+ echo "
+ evaluate-commands -client %opt{texlab_client} %{
+ evaluate-commands -try-client %opt{jumpclient} %{
+ edit -- %{input} %{line}
+ }
+ }
+ " | kak -p $kak_session
+ '
+ """,
+]
+
+[language.lua]
+filetypes = ["lua"]
+roots = [".git", ".hg"]
+command = "lua-language-server"
+[language.lua.settings.Lua]
+# See https://github.com/sumneko/vscode-lua/blob/master/setting/schema.json
+# diagnostics.enable = true
+
+[language.markdown]
+filetypes = ["md", "markdown"]
+roots = [".git", ".hg"]
+command = "vscode-markdown-language-server"
+args = ["--stdio"]
+
+# [[language]]
+# name = "markdown"
+# scope = "source.md"
+# injection-regex = "md|markdown"
+# file-types = ["md", "markdown", "PULLREQ_EDITMSG", "mkd", "mdwn", "mdown", "markdn", "mdtxt", "mdtext", "workbook"]
+# roots = [".marksman.toml"]
+# language-servers = [ "marksman" ]
+# indent = { tab-width = 2, unit = " " }
+
+[language.nim]
+filetypes = ["nim"]
+roots = ["*.nimble", ".git", ".hg"]
+command = "nimlsp"
+
+[language.nix]
+filetypes = ["nix"]
+roots = ["flake.nix", "shell.nix", ".git", ".hg"]
+command = "rnix-lsp"
+
+[language.ocaml]
+filetypes = ["ocaml"]
+# Often useful to simply do a `touch dune-workspace` in your project root folder if you have problems with root detection
+roots = ["dune-workspace", "dune-project", "Makefile", "opam", "*.opam", "esy.json", ".git", ".hg", "dune"]
+command = "ocamllsp"
+
+[language.php]
+filetypes = ["php"]
+roots = [".htaccess", "composer.json"]
+command = "intelephense"
+args = ["--stdio"]
+settings_section = "intelephense"
+[language.php.settings]
+intelephense.storagePath = "/tmp/intelephense"
+
+[language.proto]
+filetypes = ["protobuf"]
+roots = [".git", ".hg"]
+command = "pls" # https://github.com/lasorda/protobuf-language-server
+
+[language.python]
+filetypes = ["python"]
+roots = ["requirements.txt", "setup.py", ".git", ".hg"]
+command = "pylsp"
+settings_section = "_"
+[language.python.settings._]
+# See https://github.com/python-lsp/python-lsp-server#configuration
+# pylsp.configurationSources = ["flake8"]
+pylsp.plugins.jedi_completion.include_params = true
+
+[language.r]
+filetypes = ["r"]
+roots = ["DESCRIPTION", ".git", ".hg"]
+command = "R"
+args = ["--slave", "-e", "languageserver::run()"]
+
+[language.racket]
+filetypes = ["racket"]
+roots = ["info.rkt"]
+command = "racket"
+args = ["-l", "racket-langserver"]
+
+[language.reason]
+filetypes = ["reason"]
+roots = ["package.json", "Makefile", ".git", ".hg"]
+command = "ocamllsp"
+
+[language.ruby]
+filetypes = ["ruby"]
+roots = ["Gemfile"]
+command = "solargraph"
+args = ["stdio"]
+settings_section = "_"
+[language.ruby.settings._]
+# See https://github.com/castwide/solargraph/blob/master/lib/solargraph/language_server/host.rb
+# diagnostics = false
+
+# [language.rust]
+# filetypes = ["rust"]
+# roots = ["Cargo.toml"]
+# command = "sh"
+# args = [
+# "-c",
+# """
+# if path=$(rustup which rls 2>/dev/null); then
+# "$path"
+# else
+# rls
+# fi
+# """,
+# ]
+# [language.rust.settings.rust]
+# # See https://github.com/rust-lang/rls#configuration
+# # features = []
+
+[language.rust]
+filetypes = ["rust"]
+roots = ["Cargo.toml"]
+command = "sh"
+args = [
+ "-c",
+ """
+ if path=$(rustup which rust-analyzer 2>/dev/null); then
+ "$path"
+ else
+ rust-analyzer
+ fi
+ """,
+]
+settings_section = "rust-analyzer"
+[language.rust.settings.rust-analyzer]
+# See https://rust-analyzer.github.io/manual.html#configuration
+hoverActions.enable = false # kak-lsp doesn't support this at the moment
+# cargo.features = []
+
+[language.terraform]
+filetypes = ["terraform"]
+roots = ["*.tf"]
+command = "terraform-ls"
+args = ["serve"]
+[language.terraform.settings.terraform-ls]
+# See https://github.com/hashicorp/terraform-ls/blob/main/docs/SETTINGS.md
+# rootModulePaths = []
+
+# [language.typescriptreact]
+# filetypes = ["typescript"]
+# roots = ["package.json", "tsconfig.json", ".git", ".hg"]
+# command = "typescript-language-server"
+# args = ["--stdio"]
+# settings_section = "_"
+# [language.typescriptreact.settings._]
+# quotePreference = "double"
+# typescript.format.semicolons = "insert"
+
+[language.tsx]
+filetypes = ["typescript"]
+roots = ["package.json", "tsconfig.json", ".git", ".hg"]
+command = "typescript-language-server"
+args = ["--stdio"]
+settings_section = "_"
+
+# [language.typescript.settings.deno]
+# enable = true
+# lint = true
+
+[language.yaml]
+filetypes = ["yaml"]
+roots = [".git", ".hg"]
+command = "yaml-language-server"
+args = ["--stdio"]
+[language.yaml.settings]
+# See https://github.com/redhat-developer/yaml-language-server#language-server-settings
+# Defaults are at https://github.com/redhat-developer/yaml-language-server/blob/master/src/yamlSettings.ts
+# yaml.format.enable = true
+
+[language.zig]
+filetypes = ["zig"]
+roots = ["build.zig"]
+command = "zls"
+
+# Semantic tokens support
+# See https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_semanticTokens
+# for the default list of tokens and modifiers.
+# However, many language servers implement their own values.
+# Make sure to check the output of `lsp-capabilities` and each server's documentation and source code as well.
+# Examples:
+# - TypeScript: https://github.com/microsoft/vscode-languageserver-node/blob/main/client/src/common/semanticTokens.ts
+# - Rust Analyzer: https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/ide/src/syntax_highlighting.rs
+[semantic_tokens]
+faces = [
+ {face="documentation", token="comment", modifiers=["documentation"]},
+ {face="comment", token="comment"},
+ {face="function", token="function"},
+ {face="keyword", token="keyword"},
+ {face="module", token="namespace"},
+ {face="operator", token="operator"},
+ {face="string", token="string"},
+ {face="type", token="type"},
+ {face="default+d", token="variable", modifiers=["readonly"]},
+ {face="default+d", token="variable", modifiers=["constant"]},
+ {face="variable", token="variable"},
+]
diff --git a/scrappy/dotfiles/kak/colors/catppuccin_frappe.kak b/scrappy/dotfiles/kak/colors/catppuccin_frappe.kak
new file mode 100644
index 0000000..ec43367
--- /dev/null
+++ b/scrappy/dotfiles/kak/colors/catppuccin_frappe.kak
@@ -0,0 +1,83 @@
+# Catppuccin theme for Kakoune
+
+# Color palette
+declare-option str rosewater 'rgb:f2d5cf'
+declare-option str red 'rgb:e78284'
+declare-option str mauve 'rgb:ca9ee6'
+declare-option str maroon 'rgb:ea999c'
+declare-option str pink 'rgb:f4b8e4'
+declare-option str cyan 'rgb:85c1dc'
+declare-option str yellow 'rgb:e5c890'
+declare-option str green 'rgb:a6d189'
+declare-option str white 'rgb:c6d0f5'
+declare-option str blue 'rgb:8caaee'
+declare-option str sky 'rgb:99d1db'
+declare-option str lavender 'rgb:babbf1'
+declare-option str black1 'rgb:292c3c'
+declare-option str black2 'rgb:303446'
+declare-option str black3 'rgb:414559'
+declare-option str orange 'rgb:ef9f76'
+declare-option str teal 'rgb:81c8be'
+declare-option str gray0 'rgb:626880'
+declare-option str gray1 'rgb:737994'
+declare-option str bright_red %opt{red}
+declare-option str bright_green %opt{green}
+declare-option str bright_yellow %opt{yellow}
+declare-option str bright_blue %opt{blue}
+declare-option str bright_cyan %opt{cyan}
+declare-option str bright_white %opt{white}
+declare-option str foreground %opt{white}
+declare-option str background %opt{black2}
+
+# Markup
+set-face global title "%opt{rosewater}"
+set-face global header "%opt{bright_red}"
+set-face global bold "%opt{mauve}"
+set-face global italic "%opt{lavender}"
+set-face global mono "%opt{green}"
+set-face global block "%opt{cyan}"
+set-face global link "%opt{green}"
+set-face global bullet "%opt{green}"
+set-face global list "%opt{white}"
+
+# Builtins
+set-face global Default "%opt{white},%opt{background}"
+set-face global PrimarySelection "%opt{gray0},%opt{lavender}"
+set-face global SecondarySelection "%opt{lavender},%opt{gray0}"
+set-face global PrimaryCursor "%opt{background},%opt{rosewater}"
+set-face global SecondaryCursor "%opt{black1},%opt{teal}"
+set-face global PrimaryCursorEol "%opt{gray0},%opt{mauve}"
+set-face global SecondaryCursorEol "%opt{gray0},%opt{maroon}"
+set-face global LineNumbers "%opt{gray1},%opt{background}"
+set-face global LineNumberCursor "%opt{lavender},%opt{gray0}+b"
+set-face global LineNumbersWrapped "%opt{teal},%opt{black1}+i"
+set-face global MenuForeground "%opt{white},%opt{gray0}+b"
+set-face global MenuBackground "%opt{white},%opt{black3}"
+set-face global MenuInfo "%opt{black1},%opt{blue}"
+set-face global Information "%opt{black1},%opt{lavender}"
+set-face global Error "%opt{red},%opt{black2}"
+set-face global StatusLine "%opt{white},%opt{black1}"
+set-face global StatusLineMode "%opt{black2},%opt{yellow}"
+set-face global StatusLineInfo "%opt{background},%opt{green}"
+set-face global StatusLineValue "%opt{orange},%opt{gray0}"
+set-face global StatusCursor "%opt{black1},%opt{lavender}"
+set-face global Prompt "%opt{green},%opt{black2}"
+set-face global MatchingChar "%opt{maroon},%opt{black2}"
+set-face global Whitespace "%opt{gray1},%opt{background}+f"
+set-face global WrapMarker Whitespace
+set-face global BufferPadding "%opt{background},%opt{background}"
+
+# Code
+set-face global value "%opt{orange}"
+set-face global type "%opt{rosewater}"
+set-face global variable "%opt{white}"
+set-face global module "%opt{maroon}"
+set-face global function "%opt{sky}"
+set-face global string "%opt{green}"
+set-face global keyword "%opt{blue}"
+set-face global operator "%opt{blue}"
+set-face global attribute "%opt{green}"
+set-face global comment "%opt{gray1}"
+set-face global documentation comment
+set-face global meta "%opt{pink}"
+set-face global builtin "%opt{lavender}+b"
diff --git a/scrappy/dotfiles/kak/colors/catppuccin_latte.kak b/scrappy/dotfiles/kak/colors/catppuccin_latte.kak
new file mode 100644
index 0000000..f547168
--- /dev/null
+++ b/scrappy/dotfiles/kak/colors/catppuccin_latte.kak
@@ -0,0 +1,83 @@
+# Catppuccin theme for Kakoune
+
+# Color palette
+declare-option str rosewater 'rgb:dc8a78'
+declare-option str red 'rgb:d20f39'
+declare-option str mauve 'rgb:8839ef'
+declare-option str maroon 'rgb:e64553'
+declare-option str pink 'rgb:ea76cb'
+declare-option str cyan 'rgb:209fb5'
+declare-option str yellow 'rgb:df8e1d'
+declare-option str green 'rgb:40a02b'
+declare-option str white 'rgb:4c4f69'
+declare-option str blue 'rgb:1e66f5'
+declare-option str sky 'rgb:04a5e5'
+declare-option str lavender 'rgb:7287fd'
+declare-option str black1 'rgb:e6e9ef'
+declare-option str black2 'rgb:eff1f5'
+declare-option str black3 'rgb:ccd0da'
+declare-option str orange 'rgb:fe640b'
+declare-option str teal 'rgb:179299'
+declare-option str gray0 'rgb:acb0be'
+declare-option str gray1 'rgb:9ca0b0'
+declare-option str bright_red %opt{red}
+declare-option str bright_green %opt{green}
+declare-option str bright_yellow %opt{yellow}
+declare-option str bright_blue %opt{blue}
+declare-option str bright_cyan %opt{cyan}
+declare-option str bright_white %opt{white}
+declare-option str foreground %opt{white}
+declare-option str background %opt{black2}
+
+# Markup
+set-face global title "%opt{rosewater}"
+set-face global header "%opt{bright_red}"
+set-face global bold "%opt{mauve}"
+set-face global italic "%opt{lavender}"
+set-face global mono "%opt{green}"
+set-face global block "%opt{cyan}"
+set-face global link "%opt{green}"
+set-face global bullet "%opt{green}"
+set-face global list "%opt{white}"
+
+# Builtins
+set-face global Default "%opt{white},%opt{background}"
+set-face global PrimarySelection "%opt{gray0},%opt{lavender}"
+set-face global SecondarySelection "%opt{lavender},%opt{gray0}"
+set-face global PrimaryCursor "%opt{background},%opt{rosewater}"
+set-face global SecondaryCursor "%opt{black1},%opt{teal}"
+set-face global PrimaryCursorEol "%opt{gray0},%opt{mauve}"
+set-face global SecondaryCursorEol "%opt{gray0},%opt{maroon}"
+set-face global LineNumbers "%opt{gray1},%opt{background}"
+set-face global LineNumberCursor "%opt{lavender},%opt{gray0}+b"
+set-face global LineNumbersWrapped "%opt{teal},%opt{black1}+i"
+set-face global MenuForeground "%opt{white},%opt{gray0}+b"
+set-face global MenuBackground "%opt{white},%opt{black3}"
+set-face global MenuInfo "%opt{black1},%opt{blue}"
+set-face global Information "%opt{black1},%opt{lavender}"
+set-face global Error "%opt{red},%opt{black2}"
+set-face global StatusLine "%opt{white},%opt{black1}"
+set-face global StatusLineMode "%opt{black2},%opt{yellow}"
+set-face global StatusLineInfo "%opt{background},%opt{green}"
+set-face global StatusLineValue "%opt{orange},%opt{gray0}"
+set-face global StatusCursor "%opt{black1},%opt{lavender}"
+set-face global Prompt "%opt{green},%opt{black2}"
+set-face global MatchingChar "%opt{maroon},%opt{black2}"
+set-face global Whitespace "%opt{gray1},%opt{background}+f"
+set-face global WrapMarker Whitespace
+set-face global BufferPadding "%opt{background},%opt{background}"
+
+# Code
+set-face global value "%opt{orange}"
+set-face global type "%opt{rosewater}"
+set-face global variable "%opt{white}"
+set-face global module "%opt{maroon}"
+set-face global function "%opt{sky}"
+set-face global string "%opt{green}"
+set-face global keyword "%opt{blue}"
+set-face global operator "%opt{blue}"
+set-face global attribute "%opt{green}"
+set-face global comment "%opt{gray1}"
+set-face global documentation comment
+set-face global meta "%opt{pink}"
+set-face global builtin "%opt{lavender}+b"
diff --git a/scrappy/dotfiles/kak/colors/catppuccin_macchiato.kak b/scrappy/dotfiles/kak/colors/catppuccin_macchiato.kak
new file mode 100644
index 0000000..e518715
--- /dev/null
+++ b/scrappy/dotfiles/kak/colors/catppuccin_macchiato.kak
@@ -0,0 +1,83 @@
+# Catppuccin theme for Kakoune
+
+# Color palette
+declare-option str rosewater 'rgb:f4dbd6'
+declare-option str red 'rgb:ed8796'
+declare-option str mauve 'rgb:c6a0f6'
+declare-option str maroon 'rgb:ee99a0'
+declare-option str pink 'rgb:f5bde6'
+declare-option str cyan 'rgb:7dc4e4'
+declare-option str yellow 'rgb:eed49f'
+declare-option str green 'rgb:a6da95'
+declare-option str white 'rgb:cad3f5'
+declare-option str blue 'rgb:8aadf4'
+declare-option str sky 'rgb:91d7e3'
+declare-option str lavender 'rgb:b7bdf8'
+declare-option str black1 'rgb:1e2030'
+declare-option str black2 'rgb:24273a'
+declare-option str black3 'rgb:363a4f'
+declare-option str orange 'rgb:f5a97f'
+declare-option str teal 'rgb:8bd5ca'
+declare-option str gray0 'rgb:5b6078'
+declare-option str gray1 'rgb:6e738d'
+declare-option str bright_red %opt{red}
+declare-option str bright_green %opt{green}
+declare-option str bright_yellow %opt{yellow}
+declare-option str bright_blue %opt{blue}
+declare-option str bright_cyan %opt{cyan}
+declare-option str bright_white %opt{white}
+declare-option str foreground %opt{white}
+declare-option str background %opt{black2}
+
+# Markup
+set-face global title "%opt{rosewater}"
+set-face global header "%opt{bright_red}"
+set-face global bold "%opt{mauve}"
+set-face global italic "%opt{lavender}"
+set-face global mono "%opt{green}"
+set-face global block "%opt{cyan}"
+set-face global link "%opt{green}"
+set-face global bullet "%opt{green}"
+set-face global list "%opt{white}"
+
+# Builtins
+set-face global Default "%opt{white},%opt{background}"
+set-face global PrimarySelection "%opt{gray0},%opt{lavender}"
+set-face global SecondarySelection "%opt{lavender},%opt{gray0}"
+set-face global PrimaryCursor "%opt{background},%opt{rosewater}"
+set-face global SecondaryCursor "%opt{black1},%opt{teal}"
+set-face global PrimaryCursorEol "%opt{gray0},%opt{mauve}"
+set-face global SecondaryCursorEol "%opt{gray0},%opt{maroon}"
+set-face global LineNumbers "%opt{gray1},%opt{background}"
+set-face global LineNumberCursor "%opt{lavender},%opt{gray0}+b"
+set-face global LineNumbersWrapped "%opt{teal},%opt{black1}+i"
+set-face global MenuForeground "%opt{white},%opt{gray0}+b"
+set-face global MenuBackground "%opt{white},%opt{black3}"
+set-face global MenuInfo "%opt{black1},%opt{blue}"
+set-face global Information "%opt{black1},%opt{lavender}"
+set-face global Error "%opt{red},%opt{black2}"
+set-face global StatusLine "%opt{white},%opt{black1}"
+set-face global StatusLineMode "%opt{black2},%opt{yellow}"
+set-face global StatusLineInfo "%opt{background},%opt{green}"
+set-face global StatusLineValue "%opt{orange},%opt{gray0}"
+set-face global StatusCursor "%opt{black1},%opt{lavender}"
+set-face global Prompt "%opt{green},%opt{black2}"
+set-face global MatchingChar "%opt{maroon},%opt{black2}"
+set-face global Whitespace "%opt{gray1},%opt{background}+f"
+set-face global WrapMarker Whitespace
+set-face global BufferPadding "%opt{background},%opt{background}"
+
+# Code
+set-face global value "%opt{orange}"
+set-face global type "%opt{pink}"
+set-face global variable "%opt{white}"
+set-face global module "%opt{mauve}"
+set-face global function "%opt{sky}"
+set-face global string "%opt{green}"
+set-face global keyword "%opt{blue}"
+set-face global operator "%opt{blue}"
+set-face global attribute "%opt{green}"
+set-face global comment "%opt{gray1}"
+set-face global documentation comment
+set-face global meta "%opt{pink}"
+set-face global builtin "%opt{lavender}+b"
diff --git a/scrappy/dotfiles/kak/colors/catppuccin_mocha.kak b/scrappy/dotfiles/kak/colors/catppuccin_mocha.kak
new file mode 100644
index 0000000..6191160
--- /dev/null
+++ b/scrappy/dotfiles/kak/colors/catppuccin_mocha.kak
@@ -0,0 +1,83 @@
+# Catppuccin theme for Kakoune
+
+# Color palette
+declare-option str rosewater 'rgb:f5e0dc'
+declare-option str red 'rgb:f38ba8'
+declare-option str mauve 'rgb:cba6f7'
+declare-option str maroon 'rgb:eba0ac'
+declare-option str pink 'rgb:f5c2e7'
+declare-option str cyan 'rgb:74c7ec'
+declare-option str yellow 'rgb:f9e2af'
+declare-option str green 'rgb:a6e3a1'
+declare-option str white 'rgb:cdd6f4'
+declare-option str blue 'rgb:89b4fa'
+declare-option str sky 'rgb:89dceb'
+declare-option str lavender 'rgb:b4befe'
+declare-option str black1 'rgb:181825'
+declare-option str black2 'rgb:1e1e2e'
+declare-option str black3 'rgb:313244'
+declare-option str orange 'rgb:fab387'
+declare-option str teal 'rgb:94e2d5'
+declare-option str gray0 'rgb:585b70'
+declare-option str gray1 'rgb:6c7086'
+declare-option str bright_red %opt{red}
+declare-option str bright_green %opt{green}
+declare-option str bright_yellow %opt{yellow}
+declare-option str bright_blue %opt{blue}
+declare-option str bright_cyan %opt{cyan}
+declare-option str bright_white %opt{white}
+declare-option str foreground %opt{white}
+declare-option str background %opt{black2}
+
+# Markup
+set-face global title "%opt{rosewater}"
+set-face global header "%opt{bright_red}"
+set-face global bold "%opt{mauve}"
+set-face global italic "%opt{lavender}"
+set-face global mono "%opt{green}"
+set-face global block "%opt{cyan}"
+set-face global link "%opt{green}"
+set-face global bullet "%opt{green}"
+set-face global list "%opt{white}"
+
+# Builtins
+set-face global Default "%opt{white},%opt{background}"
+set-face global PrimarySelection "%opt{gray0},%opt{lavender}"
+set-face global SecondarySelection "%opt{lavender},%opt{gray0}"
+set-face global PrimaryCursor "%opt{background},%opt{rosewater}"
+set-face global SecondaryCursor "%opt{black1},%opt{teal}"
+set-face global PrimaryCursorEol "%opt{gray0},%opt{mauve}"
+set-face global SecondaryCursorEol "%opt{gray0},%opt{maroon}"
+set-face global LineNumbers "%opt{gray1},%opt{background}"
+set-face global LineNumberCursor "%opt{lavender},%opt{gray0}+b"
+set-face global LineNumbersWrapped "%opt{teal},%opt{black1}+i"
+set-face global MenuForeground "%opt{white},%opt{gray0}+b"
+set-face global MenuBackground "%opt{white},%opt{black3}"
+set-face global MenuInfo "%opt{black1},%opt{blue}"
+set-face global Information "%opt{black1},%opt{lavender}"
+set-face global Error "%opt{red},%opt{black2}"
+set-face global StatusLine "%opt{white},%opt{black1}"
+set-face global StatusLineMode "%opt{black2},%opt{yellow}"
+set-face global StatusLineInfo "%opt{background},%opt{green}"
+set-face global StatusLineValue "%opt{orange},%opt{gray0}"
+set-face global StatusCursor "%opt{black1},%opt{lavender}"
+set-face global Prompt "%opt{green},%opt{black2}"
+set-face global MatchingChar "%opt{maroon},%opt{black2}"
+set-face global Whitespace "%opt{gray1},%opt{background}+f"
+set-face global WrapMarker Whitespace
+set-face global BufferPadding "%opt{background},%opt{background}"
+
+# Code
+set-face global value "%opt{orange}"
+set-face global type "%opt{rosewater}"
+set-face global variable "%opt{white}"
+set-face global module "%opt{maroon}"
+set-face global function "%opt{sky}"
+set-face global string "%opt{green}"
+set-face global keyword "%opt{blue}"
+set-face global operator "%opt{blue}"
+set-face global attribute "%opt{green}"
+set-face global comment "%opt{gray1}"
+set-face global documentation comment
+set-face global meta "%opt{pink}"
+set-face global builtin "%opt{lavender}+b"
diff --git a/scrappy/dotfiles/kak/colors/nord.kak b/scrappy/dotfiles/kak/colors/nord.kak
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/scrappy/dotfiles/kak/colors/nord.kak
@@ -0,0 +1 @@
+
diff --git a/scrappy/dotfiles/kak/colors/pastel.kak b/scrappy/dotfiles/kak/colors/pastel.kak
new file mode 100644
index 0000000..fbf401f
--- /dev/null
+++ b/scrappy/dotfiles/kak/colors/pastel.kak
@@ -0,0 +1,87 @@
+
+# Pastel theme for Kakoune
+
+# Color palette
+# declare-option str black 'rgb:2b2e33'
+declare-option str black default
+declare-option str dark 'rgb:3b3b46'
+declare-option str gray 'rgb:5a5b5b'
+declare-option str aqua 'rgb:6bbac1'
+declare-option str white 'rgb:dcdbd7'
+declare-option str blue 'rgb:65a4cf'
+declare-option str cyan 'rgb:6dcac0'
+declare-option str blue_green 'rgb:81bba3'
+declare-option str green 'rgb:8dbc92'
+declare-option str orange 'rgb:dea981'
+declare-option str pink 'rgb:d38da9'
+declare-option str purple 'rgb:ca9bf7'
+declare-option str red 'rgb:db948e'
+declare-option str yellow 'rgb:e1d179'
+declare-option str lime 'rgb:adc47e'
+declare-option str dimgray 'rgb:3d4747'
+declare-option str psel 'rgba:46466480'
+declare-option str ssel 'rgba:37375580'
+
+declare-option str background %opt{black}
+declare-option str dimmed_background %opt{gray}
+declare-option str foreground %opt{white}
+
+# Reference
+# https://github.com/mawww/kakoune/blob/master/colors/default.kak
+# For code
+set-face global value "%opt{yellow}"
+set-face global type "%opt{aqua}"
+set-face global variable "%opt{purple}"
+set-face global module "%opt{white}"
+set-face global function "%opt{orange}"
+set-face global string "%opt{pink}"
+set-face global keyword "%opt{green}"
+set-face global operator "%opt{aqua}"
+set-face global attribute "%opt{blue_green}"
+set-face global bracket "%opt{white}+b"
+set-face global arguement "%opt{blue_green}"
+set-face global comma "%opt{white}"
+set-face global constant "%opt{blue_green}+b"
+set-face global class "%opt{lime}"
+set-face global comment "%opt{gray}+i"
+set-face global meta "%opt{blue}"
+set-face global builtin "%opt{cyan}+b"
+
+# For markup
+set-face global title "%opt{pink}"
+set-face global header "%opt{orange}"
+set-face global bold "%opt{pink}"
+set-face global italic "%opt{purple}"
+set-face global mono "%opt{green}"
+set-face global block "%opt{cyan}"
+set-face global link "%opt{green}"
+set-face global bullet "%opt{green}"
+set-face global list "%opt{white}"
+
+# Builtin faces
+set-face global Default "%opt{white},%opt{black}"
+# set-face global Default "%opt{white},default"
+set-face global PrimarySelection "default,%opt{psel}"
+set-face global SecondarySelection "default,%opt{ssel}"
+set-face global PrimaryCursor "%opt{dark},%opt{purple}"
+set-face global SecondaryCursor "%opt{dark},%opt{aqua}"
+set-face global PrimaryCursorEol "%opt{dark},%opt{yellow}"
+set-face global SecondaryCursorEol "%opt{dark},%opt{blue}"
+set-face global LineNumbers "%opt{gray},%opt{black}"
+set-face global LineNumberCursor "%opt{purple},%opt{black}+b"
+set-face global LineNumbersWrapped "%opt{gray},%opt{black}+i"
+set-face global MenuForeground "%opt{dark},%opt{white}+b"
+set-face global MenuBackground "%opt{white},%opt{dark}"
+set-face global MenuInfo "%opt{dark},%opt{orange}"
+set-face global Information "%opt{yellow},%opt{black}"
+set-face global Error "%opt{red},%opt{black}"
+set-face global StatusLine "%opt{white},%opt{black}"
+set-face global StatusLineMode "%opt{aqua},%opt{black}"
+set-face global StatusLineInfo "%opt{purple},%opt{black}"
+set-face global StatusLineValue "%opt{orange},%opt{black}"
+set-face global StatusCursor "%opt{white},%opt{blue}"
+set-face global Prompt "%opt{green},%opt{black}"
+set-face global MatchingChar "%opt{blue},%opt{black}"
+set-face global Whitespace "%opt{dimgray},%opt{black}+f"
+set-face global WrapMarker Whitespace
+set-face global BufferPadding "%opt{black},%opt{black}"
diff --git a/scrappy/dotfiles/kak/kakrc b/scrappy/dotfiles/kak/kakrc
new file mode 100644
index 0000000..5dbfd50
--- /dev/null
+++ b/scrappy/dotfiles/kak/kakrc
@@ -0,0 +1,275 @@
+# ------------------
+# Plugin Setup
+# ------------------
+
+# IMORTANT NOTE:
+# I needed to open kakoune and type ':plug-install' to actually
+# install the plugins listed in this file. I did not see this
+# mentioned in wikis or anything, so make sure to do this to
+# avoid searching github wikis and reddit needlessly.
+
+# Creates the /plugins folder if it doesnt exist each startup
+evaluate-commands %sh{
+ plugins="$kak_config/plugins"
+ mkdir -p "$plugins"
+ [ ! -e "$plugins/plug.kak" ] && \
+ git clone -q https://github.com/andreyorst/plug.kak.git "$plugins/plug.kak"
+ printf "%s\n" "source '$plugins/plug.kak/rc/plug.kak'"
+}
+plug "andreyorst/plug.kak" noload
+
+# ------------------
+# Editor Settings
+# ------------------
+
+# Disables startup message showing
+set-option global startup_info_version 30000000
+
+set-option global tabstop 4
+set-option global indentwidth 4
+set-option global scrolloff 5,3
+declare-option str kakrc_path "~/system/nate/dotfiles/kak/kakrc"
+declare-option str sway_conf_path "~/system/nate/dotfiles/sway/config.d/default"
+declare-option str shell_config "~/system/nate/modules/home-manager/home.nix"
+
+# plug "catppuccin/kakoune" theme config %{
+# colorscheme catppuccin_macchiato
+# }
+colorscheme catppuccin_macchiato
+# relative line numbers
+hook global BufCreate .* %{
+ add-highlighter buffer/ number-lines -hlcursor
+}
+
+# Git Gutters
+hook global WinCreate .* %{ evaluate-commands %sh{
+ if [ $kak_buffile != $kak_bufname ] && git ls-files --error-unmatch "$kak_buffile" > /dev/null 2>&1; then
+ echo "git show-diff"
+ fi
+}}
+
+# Write on unfocus
+hook global FocusOut .* %{ try %{
+ write
+}}
+
+hook global BufWritePost .* %{ evaluate-commands 'git update-diff' }
+hook global BufReload .* %{ evaluate-commands 'git update-diff' }
+
+# Color Render in Echo Area
+hook global WinSetOption filetype=kak %{ hook global NormalIdle .* %{
+ evaluate-commands -save-regs 'a' %{ try %{
+ execute-keys -draft w"ay
+ evaluate-commands %sh{ (
+ color="${kak_reg_a}"
+ inverted_color=$(echo "${color}" | perl -pe 'tr/0123456789abcdefABCDEF/fedcba9876543210543210/')
+ printf "%s\n" "evaluate-commands -client $kak_client %{ try %{
+ echo -markup %{{rgb:${inverted_color},rgb:${color}+b} #${color} }
+ }}" | kak -p $kak_session
+ ) >/dev/null 2>&1 -docstring 'same as [f] but in the other direction'
+map global normal -docstring 'same as [t] but in the other direction'
+map global normal -docstring 'select to beginning of line'
+map global normal -docstring 'select to end of line'
+map global normal -docstring 'split selections on line boundaries'
+map global normal -docstring 'select first and last character of each selection'
+map global normal '' '' -docstring 'flip direction of each selection'
+map global normal -docstring 'ensure selections are in forward direction (cursor then anchor)'
+map global normal -docstring 'clear the main selection'
+map global normal -docstring 'Repeat last object or f/t selection'
+
+# Scrolling remap
+map global normal -docstring 'Scroll screen up'
+map global normal -docstring 'Scroll screen down'
+
+map global normal ':comment-line' -docstring 'comment selected lines'
+
+# Ctrl-s to save
+map global normal ':w' -docstring 'write buffer'
+# Ctrl-x to save and exit
+map global normal ':w:db' -docstring 'write close buffer'
+
+# Colemak goto remappings
+map global goto n h -docstring 'line start'
+map global goto o l -docstring 'line end'
+map global goto e k -docstring 'buffer top'
+map global goto i j -docstring 'buffer bottom'
+
+map global goto h n
+map global goto l o
+map global goto k e
+map global goto j i
+
+# Remap view keys
+map global view n h
+map global view o l
+map global view e k
+map global view i j
+
+map global normal ( ': buffer-previous' -docstring 'prev buffer'
+map global normal ) ': buffer-next' -docstring 'next buffer'
+
+# map global normal [ ( -docstring 'rotate main selection'
+
+# map global normal ] ) -docstring 'rotate main selection backwards'
+# Make x select lines up and down
+def -params 1 extend-line-down %{
+ exec "%arg{1}J"
+}
+
+def -params 1 extend-line-up %{
+ exec "%arg{1}K"
+ try %{
+ exec -draft ';\n'
+ exec X
+ }
+ exec ''
+}
+
+
+map global normal x ':extend-line-down %val{count}'
+map global normal X ':extend-line-up %val{count}'
+
+map global normal k n -docstring 'next result'
+map global normal K N -docstring 'next result add selection'
+
+map global normal -docstring 'prev result'
+map global normal -docstring 'prev result add selection'
+
+map global insert -docstring 'next completion'
+map global insert -docstring 'prev completion'
+
+# User Mode Bindings
+# Accessed with
+declare-user-mode git
+map global user g ': enter-user-mode git' -docstring "Git mode"
+map global user p 'wl-paste -n' -docstring 'paste from system clip board'
+hook global RegisterModified '"' %{ nop %sh{
+ printf %s "$kak_main_reg_dquote" | wl-copy > /dev/null 2>&1 &
+}}
+
+# Open kakrc, double quotes needed to ecsape the kakrc_path option
+map global user o ":edit %opt{kakrc_path}" -docstring 'open kakrc'
+map global user z ":edit %opt{shell_config}" -docstring 'open shell config'
+map global user S ":edit %opt{sway_conf_path}" -docstring 'open wm config'
+# Git Mode Bindings
+map global git d ':git show-diff' -docstring "Show diff"
+
+# -----------------
+# LSP Configuration
+# -----------------
+
+plug "kak-lsp/kak-lsp" do %{
+ cargo install --locked --force --path .
+ mkdir -p ~/.config/kak-lsp
+ cp -n kak-lsp.toml ~/.config/kak-lsp/
+} config %{
+
+ # enable inlay hints
+ lsp-inlay-hints-enable global
+ lsp-inlay-diagnostics-enable global
+
+ # set global lsp_diagnostic_line_error_sign '║'
+ # set global lsp_diagnostic_line_warning_sign '┊'
+
+ define-command lsp-restart -docstring 'restart lsp server' %{ lsp-stop; lsp-start }
+
+ map global insert ':try lsp-snippets-select-next-placeholders catch %{ execute-keys -with-hooks tab> }' -docstring 'Select next snippet placeholder'
+ map global object a 'lsp-object' -docstring 'LSP any symbol'
+ map global object 'lsp-object' -docstring 'LSP any symbol'
+ map global object e 'lsp-object Function Method' -docstring 'LSP function or method'
+ map global object k 'lsp-object Class Interface Struct' -docstring 'LSP class interface or struct'
+ map global object d 'lsp-diagnostic-object --include-warnings' -docstring 'LSP errors and warnings'
+ map global object D 'lsp-diagnostic-object' -docstring 'LSP errors'
+
+ # load lsp for supported filetypes
+ set-option global lsp_cmd "kak-lsp -s %val{session} -vvv --log /tmp/kak-lsp.log"
+ hook global WinSetOption filetype=(rust|python|go|javascript|typescript|c|cpp|zig|dart|ruby) %{
+ lsp-enable-window
+ # lsp-auto-hover-enable
+ map global user l ': enter-user-mode lsp' -docstring 'lsp mode'
+ map global user h ': enter-user-mode lsph' -docstring 'lsp help'
+ map global user a ': enter-user-mode lspa' -docstring 'lsp code action'
+ set-option global lsp_hover_anchor false
+ }
+
+ hook global KakEnd .* lsp-exit
+}
+
+
+# -----------------
+# Other Plugins
+# -----------------
+
+map global goto f ':prompt -shell-script-candidates %{ fd --type f --hidden } file: %{ edit %val{text} }' -docstring "file"
+map global goto b ':prompt -buffer-completion buffer: %{ buffer %val{text} }' -docstring "buffer"
+
+# Fzf Plugin
+plug "andreyorst/fzf.kak" config %{
+ # map global user f ':fzf-modev' -docstring 'fzf file in project'
+ map global user b ':fzf-modeb' -docstring 'fzf current buffers'
+
+ map global user / ':fzf-modeg' -docstring 'fzf search in project'
+
+ # def fzf_file %{
+ # evaluate-commands %sh{
+ # printf "%s\n" ":fzf-mode:fzf -items-cmd fd"
+ # }
+ # }
+
+# Change FZF colors
+# FZF_DEFAULT_OPTS=" \
+# --color=bg+:#313244,bg:#1e1e2e,spinner:#f5e0dc,hl:#f38ba8 \
+# --color=fg:#cdd6f4,header:#f38ba8,info:#cba6f7,pointer:#f5e0dc \
+# --color=marker:#f5e0dc,fg+:#cdd6f4,prompt:#cba6f7,hl+:#f38ba8"
+}
+
+
+
+plug "alexherbo2/auto-pairs.kak" %{
+ enable-auto-pairs
+}
+
+
+plug "https://github.com/h-youhei/kakoune-surround"
+
+map global normal ':surround'
+
+# Custom scripts
+
+# evaluate-commands %sh{
+# for file in ~/.config/kak/rc/*.kak; do
+# printf "source %s\n" $file
+# done
+# }
+
+# source "~/.config/kak/rc/"
diff --git a/scrappy/dotfiles/kak/rc/close_tag.kak b/scrappy/dotfiles/kak/rc/close_tag.kak
new file mode 100644
index 0000000..66f7cd7
--- /dev/null
+++ b/scrappy/dotfiles/kak/rc/close_tag.kak
@@ -0,0 +1,40 @@
+#use evaluate-commands to collapse undo
+define-command close_tag %{ evaluate-commands %{
+ #revert removing indent after leaving insert mode
+ try %{
+ execute-keys -draft 's[^\n]'
+ } catch %{
+ execute-keys -draft 'K'
+ }
+ execute-keys ';Gg'
+ evaluate-commands %sh{
+ tag_list=`echo "$kak_selection" | grep -P -o '(?<=<)[^>]*[^/>](?=>)' | tac | cut -d ' ' -f 1`
+ close=
+ close_stack=
+ result=
+ for tag in $tag_list ; do
+ if [ `echo $tag | cut -c 1` = / ] ; then
+ close=${tag#/}
+ close_stack=$close\\n$close_stack
+ else
+ if [ $kak_opt_filetype != xml ] ; then
+ case $tag in
+ #self-closing tags
+ area|base|br|col|command|embed|hr|img|input|keygen|link|meta|param|source|track|wbr) continue ;;
+ esac
+ fi
+ if [ $tag = $close ] ; then
+ close_stack=${close_stack#*\\n}
+ close=`echo $close_stack | head -n 1`
+ else
+ result=$tag
+ break
+ fi
+ fi
+ done
+ [ -z $result ] && echo "fail 'no un-closed tag'"
+ echo "execute-keys -with-hooks \;i/$result>"
+ }
+}}
+
+map global user c ':close_tag' -docstring "Close tag"
diff --git a/scrappy/dotfiles/kak/rc/fzf_git.kak b/scrappy/dotfiles/kak/rc/fzf_git.kak
new file mode 100644
index 0000000..df816dc
--- /dev/null
+++ b/scrappy/dotfiles/kak/rc/fzf_git.kak
@@ -0,0 +1,60 @@
+
+define-command fzzf -params .. %{ evaluate-commands %sh{
+
+ while [ $# -gt 0 ]; do
+ case $1 in
+ (-items-cmd) shift; items_cmd="$1" ;;
+ esac
+ shift
+ done
+
+ # fzf_tmp=$(mktemp -d "${TMPDIR:-/tmp}"/fzfgit.kak.XXXXXX)
+ # fzfcmd="${fzf_tmp}/fzfcmd"
+ # result="${fzf_tmp}/result"
+
+ # (
+ # shell_path="$(command -v sh)"
+ # if [ -n "${shell_path}" ]; then
+ # # portable shebang
+ # printf "%s\n" "#!${shell_path}"
+ # # set SHELL because fzf preview uses it
+ # printf "%s\n" "SHELL=${shell_path}"
+ # fi
+ # # compose entire fzf command with all args into single file which will be executed later
+ # # printf "%s\n" "export FZF_DEFAULT_OPTS=\"${kak_opt_fzf_default_opts:-}\""
+ # printf "%s\n" "cd \"${PWD}\" && $items_cmd | fzf > $result"
+ # printf "%s\n" "evaluate-commands -client ${kak_client} edit -existing $file" | kak -p "${kak_session}"
+ # printf "%s\n" "rm ${fzfcmd}"
+ # printf "%s\n" "fg"
+ # ) >> "${fzfcmd}"
+ # chmod 755 "${fzfcmd}"
+
+ kill -TSTP $kak_client_pid
+ cd `pwd` && $items_cmd | \
+ fzf | \
+ xargs printf "evaluate-commands -client ${kak_client} edit -existing %s\n" | \
+ kak -p
+ fg
+
+ # cmd="terminal $fzfcmd"
+
+ # Tells kakoune to open a terminal and run $fzfcmd
+ # printf "%s\n" "$fzfcmd"
+
+ # ( while [ -e "${fzfcmd}" ]; do sleep 0.1; done
+ # # printf "%s\n" "evaluate-commands -client ${kak_client} edit -existing ~/out.txt" | kak -p "${kak_session}"
+ # if [ -s "${result}" ]; then
+ # file=$(cat $result)
+ # printf "%s\n" "evaluate-commands -client ${kak_client} edit -existing $file" | kak -p "${kak_session}"
+
+ # fi
+ # rm -rf $fzf_temp
+ # ) > /dev/null 2>&1 < /dev/null &
+
+ # Bring kakoune back into the foreground
+}}
+
+# define-command fzf-project %{ fzzf -items-cmd 'fd -tfile' }
+
+# map global user f ':fzf-project' -docstring 'fzf current project'
+
diff --git a/scrappy/dotfiles/keepassxc/keepassxc.ini b/scrappy/dotfiles/keepassxc/keepassxc.ini
new file mode 100644
index 0000000..7973d0c
--- /dev/null
+++ b/scrappy/dotfiles/keepassxc/keepassxc.ini
@@ -0,0 +1,21 @@
+[General]
+ConfigVersion=2
+
+[Browser]
+CustomProxyLocation=
+Enabled=true
+
+[GUI]
+ApplicationTheme=dark
+TrayIconAppearance=monochrome-light
+
+[KeeShare]
+Active="\n"
+Own="MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC8OYI/I2otsVMdam8HqfnEYa6emzV2EzXAST+1A4IOC8ojOJdGbhKbvScu5MwgPAWDRiS0yIr6fjNHpTfHCMqY/K8+UsaubHIAjVVR5SDrBvAroTfts/oIqFcW8ab9DYMPpopaxnXh25gGrmEBb33GzuL2LJ4kXz40BEYjsOSffOM83/RstRhmXaV86nPmtbswyLwSEGsPZZliMIgMEoT/Y2qcjfwRJIRIEWNybmlgrHWAzVj5sr00KQhfTRo6dQG/yBMoElYGNvKSTmQDy7WVR+Mh+rYPKOwb2v8D7UrPDKd1n+GheEBKpvE8mDcSg/vGlXOHirOBdtuk+/xhqAqxAgMBAAECggEAETzLs/WN0+5r4q3sdM1juCY2pC7UTWJtUeqYtilClVUOEiisw0CcXVKMI+wZ0jqSSgHipa3B+zZogtSw0Cj6yNpHQD67aZ45LdoY/ggs+hPSFeTMpu0MZmjoROEk6QLTmwYmSzGRT88DqVpPPEmWFrQRWU3KaSFRzy4JsFtoVz9OYeFw37d9pG8BYeruqE7kx+uzCYWRjQXrjmofFpbxGWhkIUcvbVZ8wUVso4gT4JxAQks6nryL5M9NXefU+x/e1Rkopa5aRG/H0dPMYX/8uV2lsr/AW4+kaMPrKoAsPUhErrrJDwNL2zCmcAzNgsthUo/6yLLKlnk+THAGnruEawKBgQDDG9qpvR+OCQrV1rUiX2JmomkMPKIkAf4xLFNAdOwnPMRnq1mRCn0OJmmPmRF+I5fM/64tFzGK/KD5fxll3ybN+mpA540ho9Gvk89AbILXmp9MQMEh92H5tf4/q1EKgsFjMM0aplg2zupsimyi4LuI6tCBUhWun5X5yxUsbyBW2wKBgQD296WmxLJEQJcHfHN/RYBs9HAKCWZTn8kLgoFgCxTHHTB+i5N9yug78N3LmsYUBYwbshpVewxcv6xrfxQJ/igB+zXAgDAghhvbqw+kAiFo+OapchX+Yvm6LzHdnpOIUEDcVhP/IPyGwCNqL3DYhX0A7Qudk4/g73MStAS5aHucYwKBgG4/RweyvincIitC74dErq2gCAvKFzSRi7jtev1pFCf3xmNuB2ZVruRYAD4MGD5Wjmhf8WO5P11x8uQIVamitqKdZXzXWoAvuUSlGO8mYajCzlCgJoGy78HSfKAthdWSnQQXh04PwLj3oq9CaLCAnHd5d+gbIfVSZ8SGZKh/Ap8RAoGADF8dgjwqPfcKWcqnMoH1y/92uVn9MUU42gXAm2ISuWLB8iTlz5Bhj9ciFTf8ojYg7aY/YXbXiLHlXkEwbMu5j1fZOnpxbr+pF5j7IJkmuU52p5had7LXlbcVhWeTNmnmxeLd/5LUc5+eZoxX19DgETLOuScSNw9nsVEpR2xvfMcCgYEAgR4j9M8Nq088dA5Z3VGGxJ/l3GI+gChogZBRmyG48GuBygMVujJ5Kowqid0a3ImAnvxa8BGvEJlinmAsKmyi1UsmXMCLzOWO+jRNuIRoscFk1m2D3IfG43NnjoOhr9aJZHga8DHd1FXNPTqT74jkePHlDzpGOaHXQUN5CyGNouA=nateMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC8OYI/I2otsVMdam8HqfnEYa6emzV2EzXAST+1A4IOC8ojOJdGbhKbvScu5MwgPAWDRiS0yIr6fjNHpTfHCMqY/K8+UsaubHIAjVVR5SDrBvAroTfts/oIqFcW8ab9DYMPpopaxnXh25gGrmEBb33GzuL2LJ4kXz40BEYjsOSffOM83/RstRhmXaV86nPmtbswyLwSEGsPZZliMIgMEoT/Y2qcjfwRJIRIEWNybmlgrHWAzVj5sr00KQhfTRo6dQG/yBMoElYGNvKSTmQDy7WVR+Mh+rYPKOwb2v8D7UrPDKd1n+GheEBKpvE8mDcSg/vGlXOHirOBdtuk+/xhqAqxAgMBAAECggEAETzLs/WN0+5r4q3sdM1juCY2pC7UTWJtUeqYtilClVUOEiisw0CcXVKMI+wZ0jqSSgHipa3B+zZogtSw0Cj6yNpHQD67aZ45LdoY/ggs+hPSFeTMpu0MZmjoROEk6QLTmwYmSzGRT88DqVpPPEmWFrQRWU3KaSFRzy4JsFtoVz9OYeFw37d9pG8BYeruqE7kx+uzCYWRjQXrjmofFpbxGWhkIUcvbVZ8wUVso4gT4JxAQks6nryL5M9NXefU+x/e1Rkopa5aRG/H0dPMYX/8uV2lsr/AW4+kaMPrKoAsPUhErrrJDwNL2zCmcAzNgsthUo/6yLLKlnk+THAGnruEawKBgQDDG9qpvR+OCQrV1rUiX2JmomkMPKIkAf4xLFNAdOwnPMRnq1mRCn0OJmmPmRF+I5fM/64tFzGK/KD5fxll3ybN+mpA540ho9Gvk89AbILXmp9MQMEh92H5tf4/q1EKgsFjMM0aplg2zupsimyi4LuI6tCBUhWun5X5yxUsbyBW2wKBgQD296WmxLJEQJcHfHN/RYBs9HAKCWZTn8kLgoFgCxTHHTB+i5N9yug78N3LmsYUBYwbshpVewxcv6xrfxQJ/igB+zXAgDAghhvbqw+kAiFo+OapchX+Yvm6LzHdnpOIUEDcVhP/IPyGwCNqL3DYhX0A7Qudk4/g73MStAS5aHucYwKBgG4/RweyvincIitC74dErq2gCAvKFzSRi7jtev1pFCf3xmNuB2ZVruRYAD4MGD5Wjmhf8WO5P11x8uQIVamitqKdZXzXWoAvuUSlGO8mYajCzlCgJoGy78HSfKAthdWSnQQXh04PwLj3oq9CaLCAnHd5d+gbIfVSZ8SGZKh/Ap8RAoGADF8dgjwqPfcKWcqnMoH1y/92uVn9MUU42gXAm2ISuWLB8iTlz5Bhj9ciFTf8ojYg7aY/YXbXiLHlXkEwbMu5j1fZOnpxbr+pF5j7IJkmuU52p5had7LXlbcVhWeTNmnmxeLd/5LUc5+eZoxX19DgETLOuScSNw9nsVEpR2xvfMcCgYEAgR4j9M8Nq088dA5Z3VGGxJ/l3GI+gChogZBRmyG48GuBygMVujJ5Kowqid0a3ImAnvxa8BGvEJlinmAsKmyi1UsmXMCLzOWO+jRNuIRoscFk1m2D3IfG43NnjoOhr9aJZHga8DHd1FXNPTqT74jkePHlDzpGOaHXQUN5CyGNouA=\n"
+QuietSuccess=true
+
+[PasswordGenerator]
+AdditionalChars=
+ExcludedChars=
+Length=25
+SpecialChars=false
diff --git a/scrappy/dotfiles/kitty/kitty.conf b/scrappy/dotfiles/kitty/kitty.conf
new file mode 100644
index 0000000..2adc67a
--- /dev/null
+++ b/scrappy/dotfiles/kitty/kitty.conf
@@ -0,0 +1,2334 @@
+# vim:fileencoding=utf-8:foldmethod=marker
+
+#: Fonts {{{
+
+#: kitty has very powerful font management. You can configure
+#: individual font faces and even specify special fonts for particular
+#: characters.
+
+# font_family monospace
+# bold_font auto
+# italic_font auto
+# bold_italic_font auto
+
+#: You can specify different fonts for the bold/italic/bold-italic
+#: variants. To get a full list of supported fonts use the `kitty
+#: +list-fonts` command. By default they are derived automatically, by
+#: the OSes font system. When bold_font or bold_italic_font is set to
+#: auto on macOS, the priority of bold fonts is semi-bold, bold,
+#: heavy. Setting them manually is useful for font families that have
+#: many weight variants like Book, Medium, Thick, etc. For example::
+
+font_family Hurmit Nerd Font Mono
+bold_font Hurmit Nerd Font Mono
+italic_font Hurmit Nerd Font Mono
+bold_italic_font Hurmit Nerd Font Mono
+
+font_size 12.0
+
+#: Font size (in pts)
+
+# force_ltr no
+
+#: kitty does not support BIDI (bidirectional text), however, for RTL
+#: scripts, words are automatically displayed in RTL. That is to say,
+#: in an RTL script, the words "HELLO WORLD" display in kitty as
+#: "WORLD HELLO", and if you try to select a substring of an RTL-
+#: shaped string, you will get the character that would be there had
+#: the the string been LTR. For example, assuming the Hebrew word
+#: ירושלים, selecting the character that on the screen appears to be ם
+#: actually writes into the selection buffer the character י. kitty's
+#: default behavior is useful in conjunction with a filter to reverse
+#: the word order, however, if you wish to manipulate RTL glyphs, it
+#: can be very challenging to work with, so this option is provided to
+#: turn it off. Furthermore, this option can be used with the command
+#: line program GNU FriBidi
+#: to get BIDI
+#: support, because it will force kitty to always treat the text as
+#: LTR, which FriBidi expects for terminals.
+
+# symbol_map
+
+#: E.g. symbol_map U+E0A0-U+E0A3,U+E0C0-U+E0C7 PowerlineSymbols
+
+#: Map the specified Unicode codepoints to a particular font. Useful
+#: if you need special rendering for some symbols, such as for
+#: Powerline. Avoids the need for patched fonts. Each Unicode code
+#: point is specified in the form `U+`. You
+#: can specify multiple code points, separated by commas and ranges
+#: separated by hyphens. This option can be specified multiple times.
+#: The syntax is::
+
+#: symbol_map codepoints Font Family Name
+
+# narrow_symbols
+
+#: E.g. narrow_symbols U+E0A0-U+E0A3,U+E0C0-U+E0C7 1
+
+#: Usually, for Private Use Unicode characters and some symbol/dingbat
+#: characters, if the character is followed by one or more spaces,
+#: kitty will use those extra cells to render the character larger, if
+#: the character in the font has a wide aspect ratio. Using this
+#: option you can force kitty to restrict the specified code points to
+#: render in the specified number of cells (defaulting to one cell).
+#: This option can be specified multiple times. The syntax is::
+
+#: narrow_symbols codepoints [optionally the number of cells]
+
+# disable_ligatures never
+
+#: Choose how you want to handle multi-character ligatures. The
+#: default is to always render them. You can tell kitty to not render
+#: them when the cursor is over them by using cursor to make editing
+#: easier, or have kitty never render them at all by using always, if
+#: you don't like them. The ligature strategy can be set per-window
+#: either using the kitty remote control facility or by defining
+#: shortcuts for it in kitty.conf, for example::
+
+#: map alt+1 disable_ligatures_in active always
+#: map alt+2 disable_ligatures_in all never
+#: map alt+3 disable_ligatures_in tab cursor
+
+#: Note that this refers to programming ligatures, typically
+#: implemented using the calt OpenType feature. For disabling general
+#: ligatures, use the font_features option.
+
+# font_features
+
+#: E.g. font_features none
+
+#: Choose exactly which OpenType features to enable or disable. This
+#: is useful as some fonts might have features worthwhile in a
+#: terminal. For example, Fira Code includes a discretionary feature,
+#: zero, which in that font changes the appearance of the zero (0), to
+#: make it more easily distinguishable from Ø. Fira Code also includes
+#: other discretionary features known as Stylistic Sets which have the
+#: tags ss01 through ss20.
+
+#: For the exact syntax to use for individual features, see the
+#: HarfBuzz documentation .
+
+#: Note that this code is indexed by PostScript name, and not the font
+#: family. This allows you to define very precise feature settings;
+#: e.g. you can disable a feature in the italic font but not in the
+#: regular font.
+
+#: On Linux, font features are first read from the FontConfig database
+#: and then this option is applied, so they can be configured in a
+#: single, central place.
+
+#: To get the PostScript name for a font, use `kitty +list-fonts
+#: --psnames`:
+
+#: .. code-block:: sh
+
+#: $ kitty +list-fonts --psnames | grep Fira
+#: Fira Code
+#: Fira Code Bold (FiraCode-Bold)
+#: Fira Code Light (FiraCode-Light)
+#: Fira Code Medium (FiraCode-Medium)
+#: Fira Code Regular (FiraCode-Regular)
+#: Fira Code Retina (FiraCode-Retina)
+
+#: The part in brackets is the PostScript name.
+
+#: Enable alternate zero and oldstyle numerals::
+
+#: font_features FiraCode-Retina +zero +onum
+
+#: Enable only alternate zero in the bold font::
+
+#: font_features FiraCode-Bold +zero
+
+#: Disable the normal ligatures, but keep the calt feature which (in
+#: this font) breaks up monotony::
+
+#: font_features TT2020StyleB-Regular -liga +calt
+
+#: In conjunction with force_ltr, you may want to disable Arabic
+#: shaping entirely, and only look at their isolated forms if they
+#: show up in a document. You can do this with e.g.::
+
+#: font_features UnifontMedium +isol -medi -fina -init
+
+# modify_font
+
+#: Modify font characteristics such as the position or thickness of
+#: the underline and strikethrough. The modifications can have the
+#: suffix px for pixels or % for percentage of original value. No
+#: suffix means use pts. For example::
+
+#: modify_font underline_position -2
+#: modify_font underline_thickness 150%
+#: modify_font strikethrough_position 2px
+
+#: Additionally, you can modify the size of the cell in which each
+#: font glyph is rendered and the baseline at which the glyph is
+#: placed in the cell. For example::
+
+#: modify_font cell_width 80%
+#: modify_font cell_height -2px
+#: modify_font baseline 3
+
+#: Note that modifying the baseline will automatically adjust the
+#: underline and strikethrough positions by the same amount.
+#: Increasing the baseline raises glyphs inside the cell and
+#: decreasing it lowers them. Decreasing the cell size might cause
+#: rendering artifacts, so use with care.
+
+# box_drawing_scale 0.001, 1, 1.5, 2
+
+#: The sizes of the lines used for the box drawing Unicode characters.
+#: These values are in pts. They will be scaled by the monitor DPI to
+#: arrive at a pixel value. There must be four values corresponding to
+#: thin, normal, thick, and very thick lines.
+
+# undercurl_style thin-sparse
+
+#: The style with which undercurls are rendered. This option takes the
+#: form (thin|thick)-(sparse|dense). Thin and thick control the
+#: thickness of the undercurl. Sparse and dense control how often the
+#: curl oscillates. With sparse the curl will peak once per character,
+#: with dense twice.
+
+# text_composition_strategy platform
+
+#: Control how kitty composites text glyphs onto the background color.
+#: The default value of platform tries for text rendering as close to
+#: "native" for the platform kitty is running on as possible.
+
+#: A value of legacy uses the old (pre kitty 0.28) strategy for how
+#: glyphs are composited. This will make dark text on light
+#: backgrounds look thicker and light text on dark backgrounds
+#: thinner. It might also make some text appear like the strokes are
+#: uneven.
+
+#: You can fine tune the actual contrast curve used for glyph
+#: composition by specifying two space separated numbers for this
+#: setting.
+
+#: The first number is the gamma adjustment, which controls the
+#: thickness of dark text on light backgrounds. Increasing the value
+#: will make text appear thicker. The default value for this is 1.0 on
+#: Linux and 1.7 on macOS. Valid values are 0.01 and above. The result
+#: is scaled based on the luminance difference between the background
+#: and the foreground. Dark text on light backgrounds receives the
+#: full impact of the curve while light text on dark backgrounds is
+#: affected very little.
+
+#: The second number is an additional multiplicative contrast. It is
+#: percentage ranging from 0 to 100. The default value is 0 on Linux
+#: and 30 on macOS.
+
+#: If you wish to achieve similar looking thickness in light and dark
+#: themes, a good way to experiment is start by setting the value to
+#: 1.0 0 and use a dark theme. Then adjust the second parameter until
+#: it looks good. Then switch to a light theme and adjust the first
+#: parameter until the perceived thickness matches the dark theme.
+
+#: }}}
+
+#: Cursor customization {{{
+
+cursor #D8DEE9
+
+#: Default cursor color. If set to the special value none the cursor
+#: will be rendered with a "reverse video" effect. It's color will be
+#: the color of the text in the cell it is over and the text will be
+#: rendered with the background color of the cell. Note that if the
+#: program running in the terminal sets a cursor color, this takes
+#: precedence. Also, the cursor colors are modified if the cell
+#: background and foreground colors have very low contrast.
+
+cursor_text_color background
+
+#: The color of text under the cursor. If you want it rendered with
+#: the background color of the cell underneath instead, use the
+#: special keyword: background. Note that if cursor is set to none
+#: then this option is ignored.
+
+cursor_shape block
+
+#: The cursor shape can be one of block, beam, underline. Note that
+#: when reloading the config this will be changed only if the cursor
+#: shape has not been set by the program running in the terminal. This
+#: sets the default cursor shape, applications running in the terminal
+#: can override it. In particular, shell integration
+#: in kitty sets
+#: the cursor shape to beam at shell prompts. You can avoid this by
+#: setting shell_integration to no-cursor.
+
+# cursor_beam_thickness 1.5
+
+#: The thickness of the beam cursor (in pts).
+
+# cursor_underline_thickness 2.0
+
+#: The thickness of the underline cursor (in pts).
+
+# cursor_blink_interval -1
+
+#: The interval to blink the cursor (in seconds). Set to zero to
+#: disable blinking. Negative values mean use system default. Note
+#: that the minimum interval will be limited to repaint_delay.
+
+# cursor_stop_blinking_after 15.0
+
+#: Stop blinking cursor after the specified number of seconds of
+#: keyboard inactivity. Set to zero to never stop blinking.
+
+#: }}}
+
+#: Scrollback {{{
+
+# scrollback_lines 2000
+
+#: Number of lines of history to keep in memory for scrolling back.
+#: Memory is allocated on demand. Negative numbers are (effectively)
+#: infinite scrollback. Note that using very large scrollback is not
+#: recommended as it can slow down performance of the terminal and
+#: also use large amounts of RAM. Instead, consider using
+#: scrollback_pager_history_size. Note that on config reload if this
+#: is changed it will only affect newly created windows, not existing
+#: ones.
+
+# scrollback_pager less --chop-long-lines --RAW-CONTROL-CHARS +INPUT_LINE_NUMBER
+
+#: Program with which to view scrollback in a new window. The
+#: scrollback buffer is passed as STDIN to this program. If you change
+#: it, make sure the program you use can handle ANSI escape sequences
+#: for colors and text formatting. INPUT_LINE_NUMBER in the command
+#: line above will be replaced by an integer representing which line
+#: should be at the top of the screen. Similarly CURSOR_LINE and
+#: CURSOR_COLUMN will be replaced by the current cursor position or
+#: set to 0 if there is no cursor, for example, when showing the last
+#: command output.
+
+# scrollback_pager_history_size 0
+
+#: Separate scrollback history size (in MB), used only for browsing
+#: the scrollback buffer with pager. This separate buffer is not
+#: available for interactive scrolling but will be piped to the pager
+#: program when viewing scrollback buffer in a separate window. The
+#: current implementation stores the data in UTF-8, so approximatively
+#: 10000 lines per megabyte at 100 chars per line, for pure ASCII,
+#: unformatted text. A value of zero or less disables this feature.
+#: The maximum allowed size is 4GB. Note that on config reload if this
+#: is changed it will only affect newly created windows, not existing
+#: ones.
+
+# scrollback_fill_enlarged_window no
+
+#: Fill new space with lines from the scrollback buffer after
+#: enlarging a window.
+
+# wheel_scroll_multiplier 5.0
+
+#: Multiplier for the number of lines scrolled by the mouse wheel.
+#: Note that this is only used for low precision scrolling devices,
+#: not for high precision scrolling devices on platforms such as macOS
+#: and Wayland. Use negative numbers to change scroll direction. See
+#: also wheel_scroll_min_lines.
+
+# wheel_scroll_min_lines 1
+
+#: The minimum number of lines scrolled by the mouse wheel. The scroll
+#: multiplier wheel_scroll_multiplier only takes effect after it
+#: reaches this number. Note that this is only used for low precision
+#: scrolling devices like wheel mice that scroll by very small amounts
+#: when using the wheel. With a negative number, the minimum number of
+#: lines will always be added.
+
+# touch_scroll_multiplier 1.0
+
+#: Multiplier for the number of lines scrolled by a touchpad. Note
+#: that this is only used for high precision scrolling devices on
+#: platforms such as macOS and Wayland. Use negative numbers to change
+#: scroll direction.
+
+#: }}}
+
+#: Mouse {{{
+
+# mouse_hide_wait 3.0
+
+#: Hide mouse cursor after the specified number of seconds of the
+#: mouse not being used. Set to zero to disable mouse cursor hiding.
+#: Set to a negative value to hide the mouse cursor immediately when
+#: typing text. Disabled by default on macOS as getting it to work
+#: robustly with the ever-changing sea of bugs that is Cocoa is too
+#: much effort.
+
+# url_color #0087bd
+# url_style curly
+
+#: The color and style for highlighting URLs on mouse-over. url_style
+#: can be one of: none, straight, double, curly, dotted, dashed.
+
+# open_url_with default
+
+#: The program to open clicked URLs. The special value default with
+#: first look for any URL handlers defined via the open_actions
+#: facility and if non
+#: are found, it will use the Operating System's default URL handler
+#: (open on macOS and xdg-open on Linux).
+
+# url_prefixes file ftp ftps gemini git gopher http https irc ircs kitty mailto news sftp ssh
+
+#: The set of URL prefixes to look for when detecting a URL under the
+#: mouse cursor.
+
+# detect_urls yes
+
+#: Detect URLs under the mouse. Detected URLs are highlighted with an
+#: underline and the mouse cursor becomes a hand over them. Even if
+#: this option is disabled, URLs are still clickable.
+
+# url_excluded_characters
+
+#: Additional characters to be disallowed from URLs, when detecting
+#: URLs under the mouse cursor. By default, all characters that are
+#: legal in URLs are allowed. Additionally, newlines are allowed (but
+#: stripped). This is to accommodate programs such as mutt that add
+#: hard line breaks even for continued lines. \n can be added to this
+#: option to disable this behavior. Special characters can be
+#: specified using backslash escapes, to specify a backslash use a
+#: double backslash.
+
+# show_hyperlink_targets no
+
+#: When the mouse hovers over a terminal hyperlink, show the actual
+#: URL that will be activated when the hyperlink is clicked.
+
+copy_on_select yes
+
+#: Copy to clipboard or a private buffer on select. With this set to
+#: clipboard, selecting text with the mouse will cause the text to be
+#: copied to clipboard. Useful on platforms such as macOS that do not
+#: have the concept of primary selection. You can instead specify a
+#: name such as a1 to copy to a private kitty buffer. Map a shortcut
+#: with the paste_from_buffer action to paste from this private
+#: buffer. For example::
+
+#: copy_on_select a1
+#: map shift+cmd+v paste_from_buffer a1
+
+#: Note that copying to the clipboard is a security risk, as all
+#: programs, including websites open in your browser can read the
+#: contents of the system clipboard.
+
+# paste_actions quote-urls-at-prompt
+
+#: A comma separated list of actions to take when pasting text into
+#: the terminal. The supported paste actions are:
+
+#: quote-urls-at-prompt:
+#: If the text being pasted is a URL and the cursor is at a shell prompt,
+#: automatically quote the URL (needs shell_integration).
+#: confirm:
+#: Confirm the paste if bracketed paste mode is not active or there is
+#: a large amount of text being pasted.
+#: filter:
+#: Run the filter_paste() function from the file paste-actions.py in
+#: the kitty config directory on the pasted text. The text returned by the
+#: function will be actually pasted.
+
+# strip_trailing_spaces never
+
+#: Remove spaces at the end of lines when copying to clipboard. A
+#: value of smart will do it when using normal selections, but not
+#: rectangle selections. A value of always will always do it.
+
+# select_by_word_characters @-./_~?&=%+#
+
+#: Characters considered part of a word when double clicking. In
+#: addition to these characters any character that is marked as an
+#: alphanumeric character in the Unicode database will be matched.
+
+# select_by_word_characters_forward
+
+#: Characters considered part of a word when extending the selection
+#: forward on double clicking. In addition to these characters any
+#: character that is marked as an alphanumeric character in the
+#: Unicode database will be matched.
+
+#: If empty (default) select_by_word_characters will be used for both
+#: directions.
+
+# click_interval -1.0
+
+#: The interval between successive clicks to detect double/triple
+#: clicks (in seconds). Negative numbers will use the system default
+#: instead, if available, or fallback to 0.5.
+
+# focus_follows_mouse no
+
+#: Set the active window to the window under the mouse when moving the
+#: mouse around.
+
+# pointer_shape_when_grabbed arrow
+
+#: The shape of the mouse pointer when the program running in the
+#: terminal grabs the mouse. Valid values are: arrow, beam and hand.
+
+# default_pointer_shape beam
+
+#: The default shape of the mouse pointer. Valid values are: arrow,
+#: beam and hand.
+
+# pointer_shape_when_dragging beam
+
+#: The default shape of the mouse pointer when dragging across text.
+#: Valid values are: arrow, beam and hand.
+
+#: Mouse actions {{{
+
+#: Mouse buttons can be mapped to perform arbitrary actions. The
+#: syntax is:
+
+#: .. code-block:: none
+
+#: mouse_map button-name event-type modes action
+
+#: Where button-name is one of left, middle, right, b1 ... b8 with
+#: added keyboard modifiers. For example: ctrl+shift+left refers to
+#: holding the Ctrl+Shift keys while clicking with the left mouse
+#: button. The value b1 ... b8 can be used to refer to up to eight
+#: buttons on a mouse.
+
+#: event-type is one of press, release, doublepress, triplepress,
+#: click, doubleclick. modes indicates whether the action is performed
+#: when the mouse is grabbed by the program running in the terminal,
+#: or not. The values are grabbed or ungrabbed or a comma separated
+#: combination of them. grabbed refers to when the program running in
+#: the terminal has requested mouse events. Note that the click and
+#: double click events have a delay of click_interval to disambiguate
+#: from double and triple presses.
+
+#: You can run kitty with the kitty --debug-input command line option
+#: to see mouse events. See the builtin actions below to get a sense
+#: of what is possible.
+
+#: If you want to unmap an action, map it to no_op. For example, to
+#: disable opening of URLs with a plain click::
+
+#: mouse_map left click ungrabbed no_op
+
+#: See all the mappable actions including mouse actions here
+#: .
+
+#: .. note::
+#: Once a selection is started, releasing the button that started it will
+#: automatically end it and no release event will be dispatched.
+
+# clear_all_mouse_actions no
+
+#: Remove all mouse action definitions up to this point. Useful, for
+#: instance, to remove the default mouse actions.
+
+#: Click the link under the mouse or move the cursor
+
+# mouse_map left click ungrabbed mouse_handle_click selection link prompt
+
+#:: First check for a selection and if one exists do nothing. Then
+#:: check for a link under the mouse cursor and if one exists, click
+#:: it. Finally check if the click happened at the current shell
+#:: prompt and if so, move the cursor to the click location. Note
+#:: that this requires shell integration
+#:: to work.
+
+#: Click the link under the mouse or move the cursor even when grabbed
+
+# mouse_map shift+left click grabbed,ungrabbed mouse_handle_click selection link prompt
+
+#:: Same as above, except that the action is performed even when the
+#:: mouse is grabbed by the program running in the terminal.
+
+#: Click the link under the mouse cursor
+
+# mouse_map ctrl+shift+left release grabbed,ungrabbed mouse_handle_click link
+
+#:: Variant with Ctrl+Shift is present because the simple click based
+#:: version has an unavoidable delay of click_interval, to
+#:: disambiguate clicks from double clicks.
+
+#: Discard press event for link click
+
+# mouse_map ctrl+shift+left press grabbed discard_event
+
+#:: Prevent this press event from being sent to the program that has
+#:: grabbed the mouse, as the corresponding release event is used to
+#:: open a URL.
+
+#: Paste from the primary selection
+
+# mouse_map middle release ungrabbed paste_from_selection
+
+#: Start selecting text
+
+# mouse_map left press ungrabbed mouse_selection normal
+
+#: Start selecting text in a rectangle
+
+# mouse_map ctrl+alt+left press ungrabbed mouse_selection rectangle
+
+#: Select a word
+
+# mouse_map left doublepress ungrabbed mouse_selection word
+
+#: Select a line
+
+# mouse_map left triplepress ungrabbed mouse_selection line
+
+#: Select line from point
+
+# mouse_map ctrl+alt+left triplepress ungrabbed mouse_selection line_from_point
+
+#:: Select from the clicked point to the end of the line.
+
+#: Extend the current selection
+
+# mouse_map right press ungrabbed mouse_selection extend
+
+#:: If you want only the end of the selection to be moved instead of
+#:: the nearest boundary, use move-end instead of extend.
+
+#: Paste from the primary selection even when grabbed
+
+# mouse_map shift+middle release ungrabbed,grabbed paste_selection
+# mouse_map shift+middle press grabbed discard_event
+
+#: Start selecting text even when grabbed
+
+# mouse_map shift+left press ungrabbed,grabbed mouse_selection normal
+
+#: Start selecting text in a rectangle even when grabbed
+
+# mouse_map ctrl+shift+alt+left press ungrabbed,grabbed mouse_selection rectangle
+
+#: Select a word even when grabbed
+
+# mouse_map shift+left doublepress ungrabbed,grabbed mouse_selection word
+
+#: Select a line even when grabbed
+
+# mouse_map shift+left triplepress ungrabbed,grabbed mouse_selection line
+
+#: Select line from point even when grabbed
+
+# mouse_map ctrl+shift+alt+left triplepress ungrabbed,grabbed mouse_selection line_from_point
+
+#:: Select from the clicked point to the end of the line even when
+#:: grabbed.
+
+#: Extend the current selection even when grabbed
+
+# mouse_map shift+right press ungrabbed,grabbed mouse_selection extend
+
+#: Show clicked command output in pager
+
+# mouse_map ctrl+shift+right press ungrabbed mouse_show_command_output
+
+#:: Requires shell integration
+#:: to work.
+
+#: }}}
+
+#: }}}
+
+#: Performance tuning {{{
+
+# repaint_delay 10
+
+#: Delay between screen updates (in milliseconds). Decreasing it,
+#: increases frames-per-second (FPS) at the cost of more CPU usage.
+#: The default value yields ~100 FPS which is more than sufficient for
+#: most uses. Note that to actually achieve 100 FPS, you have to
+#: either set sync_to_monitor to no or use a monitor with a high
+#: refresh rate. Also, to minimize latency when there is pending input
+#: to be processed, this option is ignored.
+
+# input_delay 3
+
+#: Delay before input from the program running in the terminal is
+#: processed (in milliseconds). Note that decreasing it will increase
+#: responsiveness, but also increase CPU usage and might cause flicker
+#: in full screen programs that redraw the entire screen on each loop,
+#: because kitty is so fast that partial screen updates will be drawn.
+
+# sync_to_monitor yes
+
+#: Sync screen updates to the refresh rate of the monitor. This
+#: prevents screen tearing
+#: when scrolling.
+#: However, it limits the rendering speed to the refresh rate of your
+#: monitor. With a very high speed mouse/high keyboard repeat rate,
+#: you may notice some slight input latency. If so, set this to no.
+
+#: }}}
+
+#: Terminal bell {{{
+
+# enable_audio_bell yes
+
+#: The audio bell. Useful to disable it in environments that require
+#: silence.
+
+# visual_bell_duration 0.0
+
+#: The visual bell duration (in seconds). Flash the screen when a bell
+#: occurs for the specified number of seconds. Set to zero to disable.
+
+# visual_bell_color none
+
+#: The color used by visual bell. Set to none will fall back to
+#: selection background color. If you feel that the visual bell is too
+#: bright, you can set it to a darker color.
+
+# window_alert_on_bell yes
+
+#: Request window attention on bell. Makes the dock icon bounce on
+#: macOS or the taskbar flash on linux.
+
+# bell_on_tab "🔔 "
+
+#: Some text or a Unicode symbol to show on the tab if a window in the
+#: tab that does not have focus has a bell. If you want to use leading
+#: or trailing spaces, surround the text with quotes. See
+#: tab_title_template for how this is rendered.
+
+#: For backwards compatibility, values of yes, y and true are
+#: converted to the default bell symbol and no, n, false and none are
+#: converted to the empty string.
+
+# command_on_bell none
+
+#: Program to run when a bell occurs. The environment variable
+#: KITTY_CHILD_CMDLINE can be used to get the program running in the
+#: window in which the bell occurred.
+
+# bell_path none
+
+#: Path to a sound file to play as the bell sound. If set to none, the
+#: system default bell sound is used. Must be in a format supported by
+#: the operating systems sound API, such as WAV or OGA on Linux
+#: (libcanberra) or AIFF, MP3 or WAV on macOS (NSSound)
+
+# linux_bell_theme __custom
+
+#: The XDG Sound Theme kitty will use to play the bell sound. Defaults
+#: to the custom theme name used by GNOME and Budgie, falling back to
+#: the default freedesktop theme if it does not exist. This option may
+#: be removed if Linux ever provides desktop-agnostic support for
+#: setting system sound themes.
+
+#: }}}
+
+#: Window layout {{{
+
+# remember_window_size yes
+# initial_window_width 640
+# initial_window_height 400
+
+#: If enabled, the OS Window size will be remembered so that new
+#: instances of kitty will have the same size as the previous
+#: instance. If disabled, the OS Window will initially have size
+#: configured by initial_window_width/height, in pixels. You can use a
+#: suffix of "c" on the width/height values to have them interpreted
+#: as number of cells instead of pixels.
+
+# enabled_layouts *
+
+#: The enabled window layouts. A comma separated list of layout names.
+#: The special value all means all layouts. The first listed layout
+#: will be used as the startup layout. Default configuration is all
+#: layouts in alphabetical order. For a list of available layouts, see
+#: the layouts .
+
+# window_resize_step_cells 2
+# window_resize_step_lines 2
+
+#: The step size (in units of cell width/cell height) to use when
+#: resizing kitty windows in a layout with the shortcut
+#: start_resizing_window. The cells value is used for horizontal
+#: resizing, and the lines value is used for vertical resizing.
+
+# window_border_width 0.5pt
+
+#: The width of window borders. Can be either in pixels (px) or pts
+#: (pt). Values in pts will be rounded to the nearest number of pixels
+#: based on screen resolution. If not specified, the unit is assumed
+#: to be pts. Note that borders are displayed only when more than one
+#: window is visible. They are meant to separate multiple windows.
+
+# draw_minimal_borders yes
+
+#: Draw only the minimum borders needed. This means that only the
+#: borders that separate the window from a neighbor are drawn. Note
+#: that setting a non-zero window_margin_width overrides this and
+#: causes all borders to be drawn.
+
+# window_margin_width 0
+
+#: The window margin (in pts) (blank area outside the border). A
+#: single value sets all four sides. Two values set the vertical and
+#: horizontal sides. Three values set top, horizontal and bottom. Four
+#: values set top, right, bottom and left.
+
+# single_window_margin_width -1
+
+#: The window margin to use when only a single window is visible (in
+#: pts). Negative values will cause the value of window_margin_width
+#: to be used instead. A single value sets all four sides. Two values
+#: set the vertical and horizontal sides. Three values set top,
+#: horizontal and bottom. Four values set top, right, bottom and left.
+
+# window_padding_width 0
+
+#: The window padding (in pts) (blank area between the text and the
+#: window border). A single value sets all four sides. Two values set
+#: the vertical and horizontal sides. Three values set top, horizontal
+#: and bottom. Four values set top, right, bottom and left.
+
+# placement_strategy center
+
+#: When the window size is not an exact multiple of the cell size, the
+#: cell area of the terminal window will have some extra padding on
+#: the sides. You can control how that padding is distributed with
+#: this option. Using a value of center means the cell area will be
+#: placed centrally. A value of top-left means the padding will be
+#: only at the bottom and right edges.
+
+# active_border_color #00ff00
+
+#: The color for the border of the active window. Set this to none to
+#: not draw borders around the active window.
+
+# inactive_border_color #cccccc
+
+#: The color for the border of inactive windows.
+
+# bell_border_color #ff5a00
+
+#: The color for the border of inactive windows in which a bell has
+#: occurred.
+
+# inactive_text_alpha 1.0
+
+#: Fade the text in inactive windows by the specified amount (a number
+#: between zero and one, with zero being fully faded).
+
+# hide_window_decorations no
+
+#: Hide the window decorations (title-bar and window borders) with
+#: yes. On macOS, titlebar-only can be used to only hide the titlebar.
+#: Whether this works and exactly what effect it has depends on the
+#: window manager/operating system. Note that the effects of changing
+#: this option when reloading config are undefined.
+
+# window_logo_path none
+
+#: Path to a logo image. Must be in PNG format. Relative paths are
+#: interpreted relative to the kitty config directory. The logo is
+#: displayed in a corner of every kitty window. The position is
+#: controlled by window_logo_position. Individual windows can be
+#: configured to have different logos either using the launch action
+#: or the remote control facility.
+
+# window_logo_position bottom-right
+
+#: Where to position the window logo in the window. The value can be
+#: one of: top-left, top, top-right, left, center, right, bottom-left,
+#: bottom, bottom-right.
+
+# window_logo_alpha 0.5
+
+#: The amount the logo should be faded into the background. With zero
+#: being fully faded and one being fully opaque.
+
+# resize_debounce_time 0.1
+
+#: The time to wait before redrawing the screen when a resize event is
+#: received (in seconds). On platforms such as macOS, where the
+#: operating system sends events corresponding to the start and end of
+#: a resize, this number is ignored.
+
+# resize_draw_strategy static
+
+#: Choose how kitty draws a window while a resize is in progress. A
+#: value of static means draw the current window contents, mostly
+#: unchanged. A value of scale means draw the current window contents
+#: scaled. A value of blank means draw a blank window. A value of size
+#: means show the window size in cells.
+
+# resize_in_steps no
+
+#: Resize the OS window in steps as large as the cells, instead of
+#: with the usual pixel accuracy. Combined with initial_window_width
+#: and initial_window_height in number of cells, this option can be
+#: used to keep the margins as small as possible when resizing the OS
+#: window. Note that this does not currently work on Wayland.
+
+# visual_window_select_characters 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ
+
+#: The list of characters for visual window selection. For example,
+#: for selecting a window to focus on with focus_visible_window. The
+#: value should be a series of unique numbers or alphabets, case
+#: insensitive, from the set [0-9A-Z]. Specify your preference as a
+#: string of characters.
+
+# confirm_os_window_close -1
+
+#: Ask for confirmation when closing an OS window or a tab with at
+#: least this number of kitty windows in it by window manager (e.g.
+#: clicking the window close button or pressing the operating system
+#: shortcut to close windows) or by the close_tab action. A value of
+#: zero disables confirmation. This confirmation also applies to
+#: requests to quit the entire application (all OS windows, via the
+#: quit action). Negative values are converted to positive ones,
+#: however, with shell_integration enabled, using negative values
+#: means windows sitting at a shell prompt are not counted, only
+#: windows where some command is currently running. Note that if you
+#: want confirmation when closing individual windows, you can map the
+#: close_window_with_confirmation action.
+
+#: }}}
+
+#: Tab bar {{{
+
+# tab_bar_edge bottom
+
+#: The edge to show the tab bar on, top or bottom.
+
+# tab_bar_margin_width 0.0
+
+#: The margin to the left and right of the tab bar (in pts).
+
+# tab_bar_margin_height 0.0 0.0
+
+#: The margin above and below the tab bar (in pts). The first number
+#: is the margin between the edge of the OS Window and the tab bar.
+#: The second number is the margin between the tab bar and the
+#: contents of the current tab.
+
+# tab_bar_style fade
+
+#: The tab bar style, can be one of:
+
+#: fade
+#: Each tab's edges fade into the background color. (See also tab_fade)
+#: slant
+#: Tabs look like the tabs in a physical file.
+#: separator
+#: Tabs are separated by a configurable separator. (See also
+#: tab_separator)
+#: powerline
+#: Tabs are shown as a continuous line with "fancy" separators.
+#: (See also tab_powerline_style)
+#: custom
+#: A user-supplied Python function called draw_tab is loaded from the file
+#: tab_bar.py in the kitty config directory. For examples of how to
+#: write such a function, see the functions named draw_tab_with_* in
+#: kitty's source code: kitty/tab_bar.py. See also
+#: this discussion
+#: for examples from kitty users.
+#: hidden
+#: The tab bar is hidden. If you use this, you might want to create
+#: a mapping for the select_tab action which presents you with a list of
+#: tabs and allows for easy switching to a tab.
+
+# tab_bar_align left
+
+#: The horizontal alignment of the tab bar, can be one of: left,
+#: center, right.
+
+# tab_bar_min_tabs 2
+
+#: The minimum number of tabs that must exist before the tab bar is
+#: shown.
+
+# tab_switch_strategy previous
+
+#: The algorithm to use when switching to a tab when the current tab
+#: is closed. The default of previous will switch to the last used
+#: tab. A value of left will switch to the tab to the left of the
+#: closed tab. A value of right will switch to the tab to the right of
+#: the closed tab. A value of last will switch to the right-most tab.
+
+# tab_fade 0.25 0.5 0.75 1
+
+#: Control how each tab fades into the background when using fade for
+#: the tab_bar_style. Each number is an alpha (between zero and one)
+#: that controls how much the corresponding cell fades into the
+#: background, with zero being no fade and one being full fade. You
+#: can change the number of cells used by adding/removing entries to
+#: this list.
+
+# tab_separator " ┇"
+
+#: The separator between tabs in the tab bar when using separator as
+#: the tab_bar_style.
+
+# tab_powerline_style angled
+
+#: The powerline separator style between tabs in the tab bar when
+#: using powerline as the tab_bar_style, can be one of: angled,
+#: slanted, round.
+
+# tab_activity_symbol none
+
+#: Some text or a Unicode symbol to show on the tab if a window in the
+#: tab that does not have focus has some activity. If you want to use
+#: leading or trailing spaces, surround the text with quotes. See
+#: tab_title_template for how this is rendered.
+
+# tab_title_max_length 0
+
+#: The maximum number of cells that can be used to render the text in
+#: a tab. A value of zero means that no limit is applied.
+
+# tab_title_template "{fmt.fg.red}{bell_symbol}{activity_symbol}{fmt.fg.tab}{title}"
+
+#: A template to render the tab title. The default just renders the
+#: title with optional symbols for bell and activity. If you wish to
+#: include the tab-index as well, use something like: {index}:{title}.
+#: Useful if you have shortcuts mapped for goto_tab N. If you prefer
+#: to see the index as a superscript, use {sup.index}. All data
+#: available is:
+
+#: title
+#: The current tab title.
+#: index
+#: The tab index useable with goto_tab N goto_tab shortcuts.
+#: layout_name
+#: The current layout name.
+#: num_windows
+#: The number of windows in the tab.
+#: num_window_groups
+#: The number of window groups (not counting overlay windows) in the tab.
+#: tab.active_wd
+#: The working directory of the currently active window in the tab
+#: (expensive, requires syscall). Use active_oldest_wd to get
+#: the directory of the oldest foreground process rather than the newest.
+#: tab.active_exe
+#: The name of the executable running in the foreground of the currently
+#: active window in the tab (expensive, requires syscall). Use
+#: active_oldest_exe for the oldest foreground process.
+#: max_title_length
+#: The maximum title length available.
+
+#: Note that formatting is done by Python's string formatting
+#: machinery, so you can use, for instance, {layout_name[:2].upper()}
+#: to show only the first two letters of the layout name, upper-cased.
+#: If you want to style the text, you can use styling directives, for
+#: example:
+#: `{fmt.fg.red}red{fmt.fg.tab}normal{fmt.bg._00FF00}greenbg{fmt.bg.tab}`.
+#: Similarly, for bold and italic:
+#: `{fmt.bold}bold{fmt.nobold}normal{fmt.italic}italic{fmt.noitalic}`.
+#: Note that for backward compatibility, if {bell_symbol} or
+#: {activity_symbol} are not present in the template, they are
+#: prepended to it.
+
+# active_tab_title_template none
+
+#: Template to use for active tabs. If not specified falls back to
+#: tab_title_template.
+
+# active_tab_foreground #000
+# active_tab_background #eee
+# active_tab_font_style bold-italic
+# inactive_tab_foreground #444
+# inactive_tab_background #999
+# inactive_tab_font_style normal
+
+#: Tab bar colors and styles.
+
+# tab_bar_background none
+
+#: Background color for the tab bar. Defaults to using the terminal
+#: background color.
+
+# tab_bar_margin_color none
+
+#: Color for the tab bar margin area. Defaults to using the terminal
+#: background color for margins above and below the tab bar. For side
+#: margins the default color is chosen to match the background color
+#: of the neighboring tab.
+
+#: }}}
+
+#: Color scheme {{{
+
+foreground #D8DEE9
+background #3B4252
+#: The foreground and background colors.
+
+background_opacity 0.95
+
+#: The opacity of the background. A number between zero and one, where
+#: one is opaque and zero is fully transparent. This will only work if
+#: supported by the OS (for instance, when using a compositor under
+#: X11). Note that it only sets the background color's opacity in
+#: cells that have the same background color as the default terminal
+#: background, so that things like the status bar in vim, powerline
+#: prompts, etc. still look good. But it means that if you use a color
+#: theme with a background color in your editor, it will not be
+#: rendered as transparent. Instead you should change the default
+#: background color in your kitty config and not use a background
+#: color in the editor color scheme. Or use the escape codes to set
+#: the terminals default colors in a shell script to launch your
+#: editor. Be aware that using a value less than 1.0 is a (possibly
+#: significant) performance hit. If you want to dynamically change
+#: transparency of windows, set dynamic_background_opacity to yes
+#: (this is off by default as it has a performance cost). Changing
+#: this option when reloading the config will only work if
+#: dynamic_background_opacity was enabled in the original config.
+
+# background_image none
+
+#: Path to a background image. Must be in PNG format.
+
+# background_image_layout tiled
+
+#: Whether to tile, scale or clamp the background image. The value can
+#: be one of tiled, mirror-tiled, scaled, clamped or centered.
+
+# background_image_linear no
+
+#: When background image is scaled, whether linear interpolation
+#: should be used.
+
+# dynamic_background_opacity no
+
+#: Allow changing of the background_opacity dynamically, using either
+#: keyboard shortcuts (increase_background_opacity and
+#: decrease_background_opacity) or the remote control facility.
+#: Changing this option by reloading the config is not supported.
+
+# background_tint 0.0
+
+#: How much to tint the background image by the background color. This
+#: option makes it easier to read the text. Tinting is done using the
+#: current background color for each window. This option applies only
+#: if background_opacity is set and transparent windows are supported
+#: or background_image is set.
+
+# background_tint_gaps 1.0
+
+#: How much to tint the background image at the window gaps by the
+#: background color, after applying background_tint. Since this is
+#: multiplicative with background_tint, it can be used to lighten the
+#: tint over the window gaps for a *separated* look.
+
+# dim_opacity 0.75
+
+#: How much to dim text that has the DIM/FAINT attribute set. One
+#: means no dimming and zero means fully dimmed (i.e. invisible).
+
+selection_foreground #4C566A
+selection_background #ECEFF4
+
+#: The foreground and background colors for text selected with the
+#: mouse. Setting both of these to none will cause a "reverse video"
+#: effect for selections, where the selection will be the cell text
+#: color and the text will become the cell background color. Setting
+#: only selection_foreground to none will cause the foreground color
+#: to be used unchanged. Note that these colors can be overridden by
+#: the program running in the terminal.
+
+#: The color table {{{
+
+#: The 256 terminal colors. There are 8 basic colors, each color has a
+#: dull and bright version, for the first 16 colors. You can set the
+#: remaining 240 colors as color16 to color255.
+
+color0 #404552
+color8 #D8DEE9
+#: black
+
+color1 #BF616A
+color9 #BF616A
+#: red
+
+color2 #A3BE8C
+color10 #A3BE8C
+#: green
+
+color3 #EBCB8B
+color11 #EBCB8B
+#: yellow
+
+color4 #81A1C1
+color12 #81A1C1
+#: blue
+
+color5 #B48EAD
+color13 #B48EAD
+#: magenta
+
+color6 #8FBDBB
+color14 #8FBDBB
+#: cyan
+
+color7 #ECEFF4
+color15 #ECEFF4
+#: white
+
+# mark1_foreground black
+
+#: Color for marks of type 1
+
+# mark1_background #98d3cb
+
+#: Color for marks of type 1 (light steel blue)
+
+# mark2_foreground black
+
+#: Color for marks of type 2
+
+# mark2_background #f2dcd3
+
+#: Color for marks of type 1 (beige)
+
+# mark3_foreground black
+
+#: Color for marks of type 3
+
+# mark3_background #f274bc
+
+#: Color for marks of type 3 (violet)
+
+#: }}}
+
+#: }}}
+
+#: Advanced {{{
+
+# shell .
+
+#: The shell program to execute. The default value of . means to use
+#: whatever shell is set as the default shell for the current user.
+#: Note that on macOS if you change this, you might need to add
+#: --login and --interactive to ensure that the shell starts in
+#: interactive mode and reads its startup rc files.
+
+editor helix
+
+#: The terminal based text editor (such as vim or nano) to use when
+#: editing the kitty config file or similar tasks.
+
+#: The default value of . means to use the environment variables
+#: VISUAL and EDITOR in that order. If these variables aren't set,
+#: kitty will run your shell ($SHELL -l -i -c env) to see if your
+#: shell startup rc files set VISUAL or EDITOR. If that doesn't work,
+#: kitty will cycle through various known editors (vim, emacs, etc.)
+#: and take the first one that exists on your system.
+
+# close_on_child_death no
+
+#: Close the window when the child process (shell) exits. With the
+#: default value no, the terminal will remain open when the child
+#: exits as long as there are still processes outputting to the
+#: terminal (for example disowned or backgrounded processes). When
+#: enabled with yes, the window will close as soon as the child
+#: process exits. Note that setting it to yes means that any
+#: background processes still using the terminal can fail silently
+#: because their stdout/stderr/stdin no longer work.
+
+# remote_control_password
+
+#: Allow other programs to control kitty using passwords. This option
+#: can be specified multiple times to add multiple passwords. If no
+#: passwords are present kitty will ask the user for permission if a
+#: program tries to use remote control with a password. A password can
+#: also *optionally* be associated with a set of allowed remote
+#: control actions. For example::
+
+#: remote_control_password "my passphrase" get-colors set-colors focus-window focus-tab
+
+#: Only the specified actions will be allowed when using this
+#: password. Glob patterns can be used too, for example::
+
+#: remote_control_password "my passphrase" set-tab-* resize-*
+
+#: To get a list of available actions, run::
+
+#: kitty @ --help
+
+#: A set of actions to be allowed when no password is sent can be
+#: specified by using an empty password. For example::
+
+#: remote_control_password "" *-colors
+
+#: Finally, the path to a python module can be specified that provides
+#: a function is_cmd_allowed that is used to check every remote
+#: control command. For example::
+
+#: remote_control_password "my passphrase" my_rc_command_checker.py
+
+#: Relative paths are resolved from the kitty configuration directory.
+#: See rc_custom_auth for details.
+
+# allow_remote_control no
+
+#: Allow other programs to control kitty. If you turn this on, other
+#: programs can control all aspects of kitty, including sending text
+#: to kitty windows, opening new windows, closing windows, reading the
+#: content of windows, etc. Note that this even works over SSH
+#: connections. The default setting of no prevents any form of remote
+#: control. The meaning of the various values are:
+
+#: password
+#: Remote control requests received over both the TTY device and the socket
+#: are confirmed based on passwords, see remote_control_password.
+
+#: socket-only
+#: Remote control requests received over a socket are accepted
+#: unconditionally. Requests received over the TTY are denied.
+#: See listen_on.
+
+#: socket
+#: Remote control requests received over a socket are accepted
+#: unconditionally. Requests received over the TTY are confirmed based on
+#: password.
+
+#: no
+#: Remote control is completely disabled.
+
+#: yes
+#: Remote control requests are always accepted.
+
+# listen_on none
+
+#: Listen to the specified UNIX socket for remote control connections.
+#: Note that this will apply to all kitty instances. It can be
+#: overridden by the kitty --listen-on command line option, which also
+#: supports listening on a TCP socket. This option accepts only UNIX
+#: sockets, such as unix:${TEMP}/mykitty or unix:@mykitty (on Linux).
+#: Environment variables are expanded and relative paths are resolved
+#: with respect to the temporary directory. If {kitty_pid} is present,
+#: then it is replaced by the PID of the kitty process, otherwise the
+#: PID of the kitty process is appended to the value, with a hyphen.
+#: See the help for kitty --listen-on for more details. Note that this
+#: will be ignored unless allow_remote_control is set to either: yes,
+#: socket or socket-only. Changing this option by reloading the config
+#: is not supported.
+
+# env
+
+#: Specify the environment variables to be set in all child processes.
+#: Using the name with an equal sign (e.g. env VAR=) will set it to
+#: the empty string. Specifying only the name (e.g. env VAR) will
+#: remove the variable from the child process' environment. Note that
+#: environment variables are expanded recursively, for example::
+
+#: env VAR1=a
+#: env VAR2=${HOME}/${VAR1}/b
+
+#: The value of VAR2 will be /a/b.
+
+# watcher
+
+#: Path to python file which will be loaded for watchers
+#: . Can be
+#: specified more than once to load multiple watchers. The watchers
+#: will be added to every kitty window. Relative paths are resolved
+#: relative to the kitty config directory. Note that reloading the
+#: config will only affect windows created after the reload.
+
+# exe_search_path
+
+#: Control where kitty finds the programs to run. The default search
+#: order is: First search the system wide PATH, then ~/.local/bin and
+#: ~/bin. If still not found, the PATH defined in the login shell
+#: after sourcing all its startup files is tried. Finally, if present,
+#: the PATH specified by the env option is tried.
+
+#: This option allows you to prepend, append, or remove paths from
+#: this search order. It can be specified multiple times for multiple
+#: paths. A simple path will be prepended to the search order. A path
+#: that starts with the + sign will be append to the search order,
+#: after ~/bin above. A path that starts with the - sign will be
+#: removed from the entire search order. For example::
+
+#: exe_search_path /some/prepended/path
+#: exe_search_path +/some/appended/path
+#: exe_search_path -/some/excluded/path
+
+# update_check_interval 24
+
+#: The interval to periodically check if an update to kitty is
+#: available (in hours). If an update is found, a system notification
+#: is displayed informing you of the available update. The default is
+#: to check every 24 hours, set to zero to disable. Update checking is
+#: only done by the official binary builds. Distro packages or source
+#: builds do not do update checking. Changing this option by reloading
+#: the config is not supported.
+
+# startup_session none
+
+#: Path to a session file to use for all kitty instances. Can be
+#: overridden by using the kitty --session =none command line option
+#: for individual instances. See sessions
+#: in the kitty
+#: documentation for details. Note that relative paths are interpreted
+#: with respect to the kitty config directory. Environment variables
+#: in the path are expanded. Changing this option by reloading the
+#: config is not supported.
+
+# clipboard_control write-clipboard write-primary read-clipboard-ask read-primary-ask
+
+#: Allow programs running in kitty to read and write from the
+#: clipboard. You can control exactly which actions are allowed. The
+#: possible actions are: write-clipboard, read-clipboard, write-
+#: primary, read-primary, read-clipboard-ask, read-primary-ask. The
+#: default is to allow writing to the clipboard and primary selection
+#: and to ask for permission when a program tries to read from the
+#: clipboard. Note that disabling the read confirmation is a security
+#: risk as it means that any program, even the ones running on a
+#: remote server via SSH can read your clipboard. See also
+#: clipboard_max_size.
+
+# clipboard_max_size 512
+
+#: The maximum size (in MB) of data from programs running in kitty
+#: that will be stored for writing to the system clipboard. A value of
+#: zero means no size limit is applied. See also clipboard_control.
+
+# file_transfer_confirmation_bypass
+
+#: The password that can be supplied to the file transfer kitten
+#: to skip the
+#: transfer confirmation prompt. This should only be used when
+#: initiating transfers from trusted computers, over trusted networks
+#: or encrypted transports, as it allows any programs running on the
+#: remote machine to read/write to the local filesystem, without
+#: permission.
+
+# allow_hyperlinks yes
+
+#: Process hyperlink escape sequences (OSC 8). If disabled OSC 8
+#: escape sequences are ignored. Otherwise they become clickable
+#: links, that you can click with the mouse or by using the hints
+#: kitten . The
+#: special value of ask means that kitty will ask before opening the
+#: link when clicked.
+
+# shell_integration enabled
+
+#: Enable shell integration on supported shells. This enables features
+#: such as jumping to previous prompts, browsing the output of the
+#: previous command in a pager, etc. on supported shells. Set to
+#: disabled to turn off shell integration, completely. It is also
+#: possible to disable individual features, set to a space separated
+#: list of these values: no-rc, no-cursor, no-title, no-cwd, no-
+#: prompt-mark, no-complete. See Shell integration
+#: for details.
+
+# allow_cloning ask
+
+#: Control whether programs running in the terminal can request new
+#: windows to be created. The canonical example is clone-in-kitty
+#: .
+#: By default, kitty will ask for permission for each clone request.
+#: Allowing cloning unconditionally gives programs running in the
+#: terminal (including over SSH) permission to execute arbitrary code,
+#: as the user who is running the terminal, on the computer that the
+#: terminal is running on.
+
+# clone_source_strategies venv,conda,env_var,path
+
+#: Control what shell code is sourced when running clone-in-kitty in
+#: the newly cloned window. The supported strategies are:
+
+#: venv
+#: Source the file $VIRTUAL_ENV/bin/activate. This is used by the
+#: Python stdlib venv module and allows cloning venvs automatically.
+#: conda
+#: Run conda activate $CONDA_DEFAULT_ENV. This supports the virtual
+#: environments created by conda.
+#: env_var
+#: Execute the contents of the environment variable
+#: KITTY_CLONE_SOURCE_CODE with eval.
+#: path
+#: Source the file pointed to by the environment variable
+#: KITTY_CLONE_SOURCE_PATH.
+
+#: This option must be a comma separated list of the above values.
+#: This only source the first valid one in the above order.
+
+# term xterm-kitty
+
+#: The value of the TERM environment variable to set. Changing this
+#: can break many terminal programs, only change it if you know what
+#: you are doing, not because you read some advice on "Stack Overflow"
+#: to change it. The TERM variable is used by various programs to get
+#: information about the capabilities and behavior of the terminal. If
+#: you change it, depending on what programs you run, and how
+#: different the terminal you are changing it to is, various things
+#: from key-presses, to colors, to various advanced features may not
+#: work. Changing this option by reloading the config will only affect
+#: newly created windows.
+
+#: }}}
+
+#: OS specific tweaks {{{
+
+# wayland_titlebar_color system
+
+#: The color of the kitty window's titlebar on Wayland systems with
+#: client side window decorations such as GNOME. A value of system
+#: means to use the default system color, a value of background means
+#: to use the background color of the currently active window and
+#: finally you can use an arbitrary color, such as #12af59 or red.
+
+# macos_titlebar_color system
+
+#: The color of the kitty window's titlebar on macOS. A value of
+#: system means to use the default system color, light or dark can
+#: also be used to set it explicitly. A value of background means to
+#: use the background color of the currently active window and finally
+#: you can use an arbitrary color, such as #12af59 or red. WARNING:
+#: This option works by using a hack when arbitrary color (or
+#: background) is configured, as there is no proper Cocoa API for it.
+#: It sets the background color of the entire window and makes the
+#: titlebar transparent. As such it is incompatible with
+#: background_opacity. If you want to use both, you are probably
+#: better off just hiding the titlebar with hide_window_decorations.
+
+# macos_option_as_alt no
+
+#: Use the Option key as an Alt key on macOS. With this set to no,
+#: kitty will use the macOS native Option+Key to enter Unicode
+#: character behavior. This will break any Alt+Key keyboard shortcuts
+#: in your terminal programs, but you can use the macOS Unicode input
+#: technique. You can use the values: left, right or both to use only
+#: the left, right or both Option keys as Alt, instead. Note that
+#: kitty itself always treats Option the same as Alt. This means you
+#: cannot use this option to configure different kitty shortcuts for
+#: Option+Key vs. Alt+Key. Also, any kitty shortcuts using
+#: Option/Alt+Key will take priority, so that any such key presses
+#: will not be passed to terminal programs running inside kitty.
+#: Changing this option by reloading the config is not supported.
+
+# macos_hide_from_tasks no
+
+#: Hide the kitty window from running tasks on macOS (⌘+Tab and the
+#: Dock). Changing this option by reloading the config is not
+#: supported.
+
+# macos_quit_when_last_window_closed no
+
+#: Have kitty quit when all the top-level windows are closed on macOS.
+#: By default, kitty will stay running, even with no open windows, as
+#: is the expected behavior on macOS.
+
+# macos_window_resizable yes
+
+#: Disable this if you want kitty top-level OS windows to not be
+#: resizable on macOS. Changing this option by reloading the config
+#: will only affect newly created OS windows.
+
+# macos_thicken_font 0
+
+#: Draw an extra border around the font with the given width, to
+#: increase legibility at small font sizes on macOS. For example, a
+#: value of 0.75 will result in rendering that looks similar to sub-
+#: pixel antialiasing at common font sizes. Note that in modern kitty,
+#: this option is obsolete (although still supported). Consider using
+#: text_composition_strategy instead.
+
+# macos_traditional_fullscreen no
+
+#: Use the macOS traditional full-screen transition, that is faster,
+#: but less pretty.
+
+# macos_show_window_title_in all
+
+#: Control where the window title is displayed on macOS. A value of
+#: window will show the title of the currently active window at the
+#: top of the macOS window. A value of menubar will show the title of
+#: the currently active window in the macOS global menu bar, making
+#: use of otherwise wasted space. A value of all will show the title
+#: in both places, and none hides the title. See
+#: macos_menubar_title_max_length for how to control the length of the
+#: title in the menu bar.
+
+# macos_menubar_title_max_length 0
+
+#: The maximum number of characters from the window title to show in
+#: the macOS global menu bar. Values less than one means that there is
+#: no maximum limit.
+
+# macos_custom_beam_cursor no
+
+#: Use a custom mouse cursor for macOS that is easier to see on both
+#: light and dark backgrounds. Nowadays, the default macOS cursor
+#: already comes with a white border. WARNING: this might make your
+#: mouse cursor invisible on dual GPU machines. Changing this option
+#: by reloading the config is not supported.
+
+# macos_colorspace srgb
+
+#: The colorspace in which to interpret terminal colors. The default
+#: of srgb will cause colors to match those seen in web browsers. The
+#: value of default will use whatever the native colorspace of the
+#: display is. The value of displayp3 will use Apple's special
+#: snowflake display P3 color space, which will result in over
+#: saturated (brighter) colors with some color shift. Reloading
+#: configuration will change this value only for newly created OS
+#: windows.
+
+# linux_display_server auto
+
+#: Choose between Wayland and X11 backends. By default, an appropriate
+#: backend based on the system state is chosen automatically. Set it
+#: to x11 or wayland to force the choice. Changing this option by
+#: reloading the config is not supported.
+
+#: }}}
+
+#: Keyboard shortcuts {{{
+
+#: Keys are identified simply by their lowercase Unicode characters.
+#: For example: a for the A key, [ for the left square bracket key,
+#: etc. For functional keys, such as Enter or Escape, the names are
+#: present at Functional key definitions
+#: .
+#: For modifier keys, the names are ctrl (control, ⌃), shift (⇧), alt
+#: (opt, option, ⌥), super (cmd, command, ⌘). See also: GLFW mods
+#:
+
+#: On Linux you can also use XKB key names to bind keys that are not
+#: supported by GLFW. See XKB keys
+#: for a list of key names. The name to use is the part
+#: after the XKB_KEY_ prefix. Note that you can only use an XKB key
+#: name for keys that are not known as GLFW keys.
+
+#: Finally, you can use raw system key codes to map keys, again only
+#: for keys that are not known as GLFW keys. To see the system key
+#: code for a key, start kitty with the kitty --debug-input option,
+#: kitty will output some debug text for every key event. In that text
+#: look for native_code, the value of that becomes the key name in the
+#: shortcut. For example:
+
+#: .. code-block:: none
+
+#: on_key_input: glfw key: 0x61 native_code: 0x61 action: PRESS mods: none text: 'a'
+
+#: Here, the key name for the A key is 0x61 and you can use it with::
+
+#: map ctrl+0x61 something
+
+#: to map Ctrl+A to something.
+
+#: You can use the special action no_op to unmap a keyboard shortcut
+#: that is assigned in the default configuration::
+
+#: map kitty_mod+space no_op
+
+#: If you would like kitty to completely ignore a key event, not even
+#: sending it to the program running in the terminal, map it to
+#: discard_event::
+
+#: map kitty_mod+f1 discard_event
+
+#: You can combine multiple actions to be triggered by a single
+#: shortcut with combine action, using the syntax below::
+
+#: map key combine action1 action2 action3 ...
+
+#: For example::
+
+#: map kitty_mod+e combine : new_window : next_layout
+
+#: This will create a new window and switch to the next available
+#: layout.
+
+#: You can use multi-key shortcuts with the syntax shown below::
+
+#: map key1>key2>key3 action
+
+#: For example::
+
+#: map ctrl+f>2 set_font_size 20
+
+#: The full list of actions that can be mapped to key presses is
+#: available here .
+
+# kitty_mod ctrl+shift
+
+#: Special modifier key alias for default shortcuts. You can change
+#: the value of this option to alter all default shortcuts that use
+#: kitty_mod.
+
+# clear_all_shortcuts no
+
+#: Remove all shortcut definitions up to this point. Useful, for
+#: instance, to remove the default shortcuts.
+
+# action_alias
+
+#: E.g. action_alias launch_tab launch --type=tab --cwd=current
+
+#: Define action aliases to avoid repeating the same options in
+#: multiple mappings. Aliases can be defined for any action and will
+#: be expanded recursively. For example, the above alias allows you to
+#: create mappings to launch a new tab in the current working
+#: directory without duplication::
+
+#: map f1 launch_tab vim
+#: map f2 launch_tab emacs
+
+#: Similarly, to alias kitten invocation::
+
+#: action_alias hints kitten hints --hints-offset=0
+
+# kitten_alias
+
+#: E.g. kitten_alias hints hints --hints-offset=0
+
+#: Like action_alias above, but specifically for kittens. Generally,
+#: prefer to use action_alias. This option is a legacy version,
+#: present for backwards compatibility. It causes all invocations of
+#: the aliased kitten to be substituted. So the example above will
+#: cause all invocations of the hints kitten to have the --hints-
+#: offset=0 option applied.
+
+#: Clipboard {{{
+
+#: Copy to clipboard
+
+# map kitty_mod+c copy_to_clipboard
+# map cmd+c copy_to_clipboard
+
+#:: There is also a copy_or_interrupt action that can be optionally
+#:: mapped to Ctrl+C. It will copy only if there is a selection and
+#:: send an interrupt otherwise. Similarly,
+#:: copy_and_clear_or_interrupt will copy and clear the selection or
+#:: send an interrupt if there is no selection.
+
+#: Paste from clipboard
+
+# map kitty_mod+v paste_from_clipboard
+# map cmd+v paste_from_clipboard
+
+#: Paste from selection
+
+# map kitty_mod+s paste_from_selection
+# map shift+insert paste_from_selection
+
+#: Pass selection to program
+
+# map kitty_mod+o pass_selection_to_program
+
+#:: You can also pass the contents of the current selection to any
+#:: program with pass_selection_to_program. By default, the system's
+#:: open program is used, but you can specify your own, the selection
+#:: will be passed as a command line argument to the program. For
+#:: example::
+
+#:: map kitty_mod+o pass_selection_to_program firefox
+
+#:: You can pass the current selection to a terminal program running
+#:: in a new kitty window, by using the @selection placeholder::
+
+#:: map kitty_mod+y new_window less @selection
+
+#: }}}
+
+#: Scrolling {{{
+
+#: Scroll line up
+
+# map kitty_mod+up scroll_line_up
+# map kitty_mod+k scroll_line_up
+# map opt+cmd+page_up scroll_line_up
+# map cmd+up scroll_line_up
+
+#: Scroll line down
+
+# map kitty_mod+down scroll_line_down
+# map kitty_mod+j scroll_line_down
+# map opt+cmd+page_down scroll_line_down
+# map cmd+down scroll_line_down
+
+#: Scroll page up
+
+# map kitty_mod+page_up scroll_page_up
+# map cmd+page_up scroll_page_up
+
+#: Scroll page down
+
+# map kitty_mod+page_down scroll_page_down
+# map cmd+page_down scroll_page_down
+
+#: Scroll to top
+
+# map kitty_mod+home scroll_home
+# map cmd+home scroll_home
+
+#: Scroll to bottom
+
+# map kitty_mod+end scroll_end
+# map cmd+end scroll_end
+
+#: Scroll to previous shell prompt
+
+# map kitty_mod+z scroll_to_prompt -1
+
+#:: Use a parameter of 0 for scroll_to_prompt to scroll to the last
+#:: jumped to or the last clicked position. Requires shell
+#:: integration
+#:: to work.
+
+#: Scroll to next shell prompt
+
+# map kitty_mod+x scroll_to_prompt 1
+
+#: Browse scrollback buffer in pager
+
+# map kitty_mod+h show_scrollback
+
+#:: You can pipe the contents of the current screen and history
+#:: buffer as STDIN to an arbitrary program using launch --stdin-
+#:: source. For example, the following opens the scrollback buffer in
+#:: less in an overlay window::
+
+#:: map f1 launch --stdin-source=@screen_scrollback --stdin-add-formatting --type=overlay less +G -R
+
+#:: For more details on piping screen and buffer contents to external
+#:: programs, see launch .
+
+#: Browse output of the last shell command in pager
+
+# map kitty_mod+g show_last_command_output
+
+#:: You can also define additional shortcuts to get the command
+#:: output. For example, to get the first command output on screen::
+
+#:: map f1 show_first_command_output_on_screen
+
+#:: To get the command output that was last accessed by a keyboard
+#:: action or mouse action::
+
+#:: map f1 show_last_visited_command_output
+
+#:: You can pipe the output of the last command run in the shell
+#:: using the launch action. For example, the following opens the
+#:: output in less in an overlay window::
+
+#:: map f1 launch --stdin-source=@last_cmd_output --stdin-add-formatting --type=overlay less +G -R
+
+#:: To get the output of the first command on the screen, use
+#:: @first_cmd_output_on_screen. To get the output of the last jumped
+#:: to command, use @last_visited_cmd_output.
+
+#:: Requires shell integration
+#:: to work.
+
+#: }}}
+
+#: Window management {{{
+
+#: New window
+
+# map kitty_mod+enter new_window
+# map cmd+enter new_window
+
+#:: You can open a new kitty window running an arbitrary program, for
+#:: example::
+
+#:: map kitty_mod+y launch mutt
+
+#:: You can open a new window with the current working directory set
+#:: to the working directory of the current window using::
+
+#:: map ctrl+alt+enter launch --cwd=current
+
+#:: You can open a new window that is allowed to control kitty via
+#:: the kitty remote control facility with launch --allow-remote-
+#:: control. Any programs running in that window will be allowed to
+#:: control kitty. For example::
+
+#:: map ctrl+enter launch --allow-remote-control some_program
+
+#:: You can open a new window next to the currently active window or
+#:: as the first window, with::
+
+#:: map ctrl+n launch --location=neighbor
+#:: map ctrl+f launch --location=first
+
+#:: For more details, see launch
+#:: .
+
+#: New OS window
+
+# map kitty_mod+n new_os_window
+# map cmd+n new_os_window
+
+#:: Works like new_window above, except that it opens a top-level OS
+#:: window. In particular you can use new_os_window_with_cwd to open
+#:: a window with the current working directory.
+
+#: Close window
+
+# map kitty_mod+w close_window
+# map shift+cmd+d close_window
+
+#: Next window
+
+# map kitty_mod+] next_window
+
+#: Previous window
+
+# map kitty_mod+[ previous_window
+
+#: Move window forward
+
+# map kitty_mod+f move_window_forward
+
+#: Move window backward
+
+# map kitty_mod+b move_window_backward
+
+#: Move window to top
+
+# map kitty_mod+` move_window_to_top
+
+#: Start resizing window
+
+# map kitty_mod+r start_resizing_window
+# map cmd+r start_resizing_window
+
+#: First window
+
+# map kitty_mod+1 first_window
+# map cmd+1 first_window
+
+#: Second window
+
+# map kitty_mod+2 second_window
+# map cmd+2 second_window
+
+#: Third window
+
+# map kitty_mod+3 third_window
+# map cmd+3 third_window
+
+#: Fourth window
+
+# map kitty_mod+4 fourth_window
+# map cmd+4 fourth_window
+
+#: Fifth window
+
+# map kitty_mod+5 fifth_window
+# map cmd+5 fifth_window
+
+#: Sixth window
+
+# map kitty_mod+6 sixth_window
+# map cmd+6 sixth_window
+
+#: Seventh window
+
+# map kitty_mod+7 seventh_window
+# map cmd+7 seventh_window
+
+#: Eight window
+
+# map kitty_mod+8 eighth_window
+# map cmd+8 eighth_window
+
+#: Ninth window
+
+# map kitty_mod+9 ninth_window
+# map cmd+9 ninth_window
+
+#: Tenth window
+
+# map kitty_mod+0 tenth_window
+
+#: Visually select and focus window
+
+# map kitty_mod+f7 focus_visible_window
+
+#:: Display overlay numbers and alphabets on the window, and switch
+#:: the focus to the window when you press the key. When there are
+#:: only two windows, the focus will be switched directly without
+#:: displaying the overlay. You can change the overlay characters and
+#:: their order with option visual_window_select_characters.
+
+#: Visually swap window with another
+
+# map kitty_mod+f8 swap_with_window
+
+#:: Works like focus_visible_window above, but swaps the window.
+
+#: }}}
+
+#: Tab management {{{
+
+#: Next tab
+
+# map kitty_mod+right next_tab
+# map shift+cmd+] next_tab
+# map ctrl+tab next_tab
+
+#: Previous tab
+
+# map kitty_mod+left previous_tab
+# map shift+cmd+[ previous_tab
+# map ctrl+shift+tab previous_tab
+
+#: New tab
+
+# map kitty_mod+t new_tab
+# map cmd+t new_tab
+
+#: Close tab
+
+# map kitty_mod+q close_tab
+# map cmd+w close_tab
+
+#: Close OS window
+
+# map shift+cmd+w close_os_window
+
+#: Move tab forward
+
+# map kitty_mod+. move_tab_forward
+
+#: Move tab backward
+
+# map kitty_mod+, move_tab_backward
+
+#: Set tab title
+
+# map kitty_mod+alt+t set_tab_title
+# map shift+cmd+i set_tab_title
+
+
+#: You can also create shortcuts to go to specific tabs, with 1 being
+#: the first tab, 2 the second tab and -1 being the previously active
+#: tab, and any number larger than the last tab being the last tab::
+
+#: map ctrl+alt+1 goto_tab 1
+#: map ctrl+alt+2 goto_tab 2
+
+#: Just as with new_window above, you can also pass the name of
+#: arbitrary commands to run when using new_tab and new_tab_with_cwd.
+#: Finally, if you want the new tab to open next to the current tab
+#: rather than at the end of the tabs list, use::
+
+#: map ctrl+t new_tab !neighbor [optional cmd to run]
+#: }}}
+
+#: Layout management {{{
+
+#: Next layout
+
+# map kitty_mod+l next_layout
+
+
+#: You can also create shortcuts to switch to specific layouts::
+
+#: map ctrl+alt+t goto_layout tall
+#: map ctrl+alt+s goto_layout stack
+
+#: Similarly, to switch back to the previous layout::
+
+#: map ctrl+alt+p last_used_layout
+
+#: There is also a toggle_layout action that switches to the named
+#: layout or back to the previous layout if in the named layout.
+#: Useful to temporarily "zoom" the active window by switching to the
+#: stack layout::
+
+#: map ctrl+alt+z toggle_layout stack
+#: }}}
+
+#: Font sizes {{{
+
+#: You can change the font size for all top-level kitty OS windows at
+#: a time or only the current one.
+
+#: Increase font size
+
+# map kitty_mod+equal change_font_size all +2.0
+# map kitty_mod+plus change_font_size all +2.0
+# map kitty_mod+kp_add change_font_size all +2.0
+# map cmd+plus change_font_size all +2.0
+# map cmd+equal change_font_size all +2.0
+# map shift+cmd+equal change_font_size all +2.0
+
+#: Decrease font size
+
+# map kitty_mod+minus change_font_size all -2.0
+# map kitty_mod+kp_subtract change_font_size all -2.0
+# map cmd+minus change_font_size all -2.0
+# map shift+cmd+minus change_font_size all -2.0
+
+#: Reset font size
+
+# map kitty_mod+backspace change_font_size all 0
+# map cmd+0 change_font_size all 0
+
+
+#: To setup shortcuts for specific font sizes::
+
+#: map kitty_mod+f6 change_font_size all 10.0
+
+#: To setup shortcuts to change only the current OS window's font
+#: size::
+
+#: map kitty_mod+f6 change_font_size current 10.0
+#: }}}
+
+#: Select and act on visible text {{{
+
+#: Use the hints kitten to select text and either pass it to an
+#: external program or insert it into the terminal or copy it to the
+#: clipboard.
+
+#: Open URL
+
+# map kitty_mod+e open_url_with_hints
+
+#:: Open a currently visible URL using the keyboard. The program used
+#:: to open the URL is specified in open_url_with.
+
+#: Insert selected path
+
+# map kitty_mod+p>f kitten hints --type path --program -
+
+#:: Select a path/filename and insert it into the terminal. Useful,
+#:: for instance to run git commands on a filename output from a
+#:: previous git command.
+
+#: Open selected path
+
+# map kitty_mod+p>shift+f kitten hints --type path
+
+#:: Select a path/filename and open it with the default open program.
+
+#: Insert selected line
+
+# map kitty_mod+p>l kitten hints --type line --program -
+
+#:: Select a line of text and insert it into the terminal. Useful for
+#:: the output of things like: `ls -1`.
+
+#: Insert selected word
+
+# map kitty_mod+p>w kitten hints --type word --program -
+
+#:: Select words and insert into terminal.
+
+#: Insert selected hash
+
+# map kitty_mod+p>h kitten hints --type hash --program -
+
+#:: Select something that looks like a hash and insert it into the
+#:: terminal. Useful with git, which uses SHA1 hashes to identify
+#:: commits.
+
+#: Open the selected file at the selected line
+
+# map kitty_mod+p>n kitten hints --type linenum
+
+#:: Select something that looks like filename:linenum and open it in
+#:: vim at the specified line number.
+
+#: Open the selected hyperlink
+
+# map kitty_mod+p>y kitten hints --type hyperlink
+
+#:: Select a hyperlink (i.e. a URL that has been marked as such by
+#:: the terminal program, for example, by `ls --hyperlink=auto`).
+
+
+#: The hints kitten has many more modes of operation that you can map
+#: to different shortcuts. For a full description see hints kitten
+#: .
+#: }}}
+
+#: Miscellaneous {{{
+
+#: Show documentation
+
+# map kitty_mod+f1 show_kitty_doc overview
+
+#: Toggle fullscreen
+
+# map kitty_mod+f11 toggle_fullscreen
+# map ctrl+cmd+f toggle_fullscreen
+
+#: Toggle maximized
+
+# map kitty_mod+f10 toggle_maximized
+
+#: Toggle macOS secure keyboard entry
+
+# map opt+cmd+s toggle_macos_secure_keyboard_entry
+
+#: Unicode input
+
+# map kitty_mod+u kitten unicode_input
+# map ctrl+cmd+space kitten unicode_input
+
+#: Edit config file
+
+# map kitty_mod+f2 edit_config_file
+# map cmd+, edit_config_file
+
+#: Open the kitty command shell
+
+# map kitty_mod+escape kitty_shell window
+
+#:: Open the kitty shell in a new window / tab / overlay / os_window
+#:: to control kitty using commands.
+
+#: Increase background opacity
+
+# map kitty_mod+a>m set_background_opacity +0.1
+
+#: Decrease background opacity
+
+# map kitty_mod+a>l set_background_opacity -0.1
+
+#: Make background fully opaque
+
+# map kitty_mod+a>1 set_background_opacity 1
+
+#: Reset background opacity
+
+# map kitty_mod+a>d set_background_opacity default
+
+#: Reset the terminal
+
+# map kitty_mod+delete clear_terminal reset active
+# map opt+cmd+r clear_terminal reset active
+
+#:: You can create shortcuts to clear/reset the terminal. For
+#:: example::
+
+#:: # Reset the terminal
+#:: map f1 clear_terminal reset active
+#:: # Clear the terminal screen by erasing all contents
+#:: map f1 clear_terminal clear active
+#:: # Clear the terminal scrollback by erasing it
+#:: map f1 clear_terminal scrollback active
+#:: # Scroll the contents of the screen into the scrollback
+#:: map f1 clear_terminal scroll active
+#:: # Clear everything up to the line with the cursor
+#:: map f1 clear_terminal to_cursor active
+
+#:: If you want to operate on all kitty windows instead of just the
+#:: current one, use all instead of active.
+
+#:: It is also possible to remap Ctrl+L to both scroll the current
+#:: screen contents into the scrollback buffer and clear the screen,
+#:: instead of just clearing the screen, for example, for ZSH add the
+#:: following to ~/.zshrc:
+
+#:: .. code-block:: zsh
+
+#:: scroll-and-clear-screen() {
+#:: printf '\n%.0s' {1..$LINES}
+#:: zle clear-screen
+#:: }
+#:: zle -N scroll-and-clear-screen
+#:: bindkey '^l' scroll-and-clear-screen
+
+#: Clear up to cursor line
+
+# map cmd+k clear_terminal to_cursor active
+
+#: Reload kitty.conf
+
+# map kitty_mod+f5 load_config_file
+# map ctrl+cmd+, load_config_file
+
+#:: Reload kitty.conf, applying any changes since the last time it
+#:: was loaded. Note that a handful of options cannot be dynamically
+#:: changed and require a full restart of kitty. Particularly, when
+#:: changing shortcuts for actions located on the macOS global menu
+#:: bar, a full restart is needed. You can also map a keybinding to
+#:: load a different config file, for example::
+
+#:: map f5 load_config /path/to/alternative/kitty.conf
+
+#:: Note that all options from the original kitty.conf are discarded,
+#:: in other words the new configuration *replace* the old ones.
+
+#: Debug kitty configuration
+
+# map kitty_mod+f6 debug_config
+# map opt+cmd+, debug_config
+
+#:: Show details about exactly what configuration kitty is running
+#:: with and its host environment. Useful for debugging issues.
+
+#: Send arbitrary text on key presses
+
+#:: E.g. map ctrl+shift+alt+h send_text all Hello World
+
+#:: You can tell kitty to send arbitrary (UTF-8) encoded text to the
+#:: client program when pressing specified shortcut keys. For
+#:: example::
+
+#:: map ctrl+alt+a send_text all Special text
+
+#:: This will send "Special text" when you press the Ctrl+Alt+A key
+#:: combination. The text to be sent decodes ANSI C escapes
+#:: so you can use escapes like \e to send control
+#:: codes or \u21fb to send Unicode characters (or you can just input
+#:: the Unicode characters directly as UTF-8 text). You can use
+#:: `kitty +kitten show_key` to get the key escape codes you want to
+#:: emulate.
+
+#:: The first argument to send_text is the keyboard modes in which to
+#:: activate the shortcut. The possible values are normal,
+#:: application, kitty or a comma separated combination of them. The
+#:: modes normal and application refer to the DECCKM cursor key mode
+#:: for terminals, and kitty refers to the kitty extended keyboard
+#:: protocol. The special value all means all of them.
+
+#:: Some more examples::
+
+#:: # Output a word and move the cursor to the start of the line (like typing and pressing Home)
+#:: map ctrl+alt+a send_text normal Word\e[H
+#:: map ctrl+alt+a send_text application Word\eOH
+#:: # Run a command at a shell prompt (like typing the command and pressing Enter)
+#:: map ctrl+alt+a send_text normal,application some command with arguments\r
+
+#: Open kitty Website
+
+# map shift+cmd+/ open_url https://sw.kovidgoyal.net/kitty/
+
+#: Hide macOS kitty application
+
+# map cmd+h hide_macos_app
+
+#: Hide macOS other applications
+
+# map opt+cmd+h hide_macos_other_apps
+
+#: Minimize macOS window
+
+# map cmd+m minimize_macos_window
+
+#: Quit kitty
+
+# map cmd+q quit
+
+#: }}}
+
+#: }}}
diff --git a/scrappy/dotfiles/macchiato.gitconfig b/scrappy/dotfiles/macchiato.gitconfig
new file mode 100644
index 0000000..f180e4e
--- /dev/null
+++ b/scrappy/dotfiles/macchiato.gitconfig
@@ -0,0 +1,26 @@
+[delta "Catppuccin Macchiato"]
+ blame-palette = "#24273a #1e2030 #181926 #363a4f #494d64"
+ commit-decoration-style = "box ul"
+ dark = true
+ file-decoration-style = "#cad3f5"
+ file-style = "#cad3f5"
+ hunk-header-decoration-style = "box ul"
+ hunk-header-file-style = "bold"
+ hunk-header-line-number-style = "bold #a5adcb"
+ hunk-header-style = "file line-number syntax"
+ line-numbers = true
+ line-numbers-left-style = "#6e738d"
+ line-numbers-minus-style = "bold #ed8796"
+ line-numbers-plus-style = "bold #a6da95"
+ line-numbers-right-style = "#6e738d"
+ line-numbers-zero-style = "#6e738d"
+ # 25% red 75% base
+ minus-emph-style = "bold syntax #564052"
+ # 10% red 90% base
+ minus-style = "syntax #383143"
+ # 25% green 75% base
+ plus-emph-style = "bold syntax #455552"
+ # 10% green 90% base
+ plus-style = "syntax #313943"
+ # Should match the name of the bat theme
+ syntax-theme = "Catppuccin-macchiato"
diff --git a/scrappy/dotfiles/mako/config b/scrappy/dotfiles/mako/config
new file mode 100644
index 0000000..286de2f
--- /dev/null
+++ b/scrappy/dotfiles/mako/config
@@ -0,0 +1,23 @@
+font=Overpass Nerd Font 20
+
+background-color=#24273a
+text-color=#cad3f5
+width=630
+height=400
+padding=10
+margin=20
+progress-color=over #eceff480
+icon-path=/usr/share/icons/Arc-X-D
+max-icon-size=140
+layer=overlay
+
+border-size=5
+border-radius=8
+border-color=#b7bdf8
+
+default-timeout=5000
+
+[urgency=high]
+
+ignore-timeout=1
+
diff --git a/scrappy/dotfiles/nwg-hello/greet-hyprland.conf b/scrappy/dotfiles/nwg-hello/greet-hyprland.conf
new file mode 100644
index 0000000..dc7e693
--- /dev/null
+++ b/scrappy/dotfiles/nwg-hello/greet-hyprland.conf
@@ -0,0 +1,10 @@
+# Barebones config to launch nwg-hello
+monitor=,preferred,auto,1
+bind = SUPER, Q, killactive,
+misc {
+ disable_hyprland_logo = true
+}
+animations {
+ enabled = false
+}
+exec-once = nwg-hello; hyprctl dispatch exit
diff --git a/scrappy/dotfiles/sway/background.pid b/scrappy/dotfiles/sway/background.pid
new file mode 100644
index 0000000..219ef67
--- /dev/null
+++ b/scrappy/dotfiles/sway/background.pid
@@ -0,0 +1 @@
+7376
diff --git a/scrappy/dotfiles/sway/cheatsheet b/scrappy/dotfiles/sway/cheatsheet
new file mode 100644
index 0000000..ef2704f
--- /dev/null
+++ b/scrappy/dotfiles/sway/cheatsheet
@@ -0,0 +1,179 @@
+EndeavourOS Sway-WM CheatSheet :
+
+- Hello! Welcome to EndeavourOS and our Sway-WM Edition! Now we'll admit this is not vanilla Sway and it wasn't desinged to be. It is loosely themed around the ArcDark
+colorscheme chosen for it's stability and ease of implementation. The default bar is Waybar not Swaybar - once again chosen it's ease of use and stability as well
+the options it offers.
+
+- Sway is documentated through man pages unlike i3.To get a overview of what to expect you can read 'man 5 sway'. The pages are then spilt into topics - some the
+important ones are listed at the bottom of the document. Waybar is also documented through man pages - 'man 5 waybar'.
+
+- Our file structure is spilt for easier use - the names of the files eg; 'output' referring to the part they play.
+
+- If your experiencing issus with your cursor - edit file '~/.profile' and comment out 'export WLR_NO_HARDWARE_CURSORS=1'
+
+- Other than that enjoy your time here and welcome! You can join the Forum or our Telegram - we'd love to hear from you!
+
+ = windows key
+
+# start floating xfce4-terminal
++Return
+
+# start fixed termite-terminal
++Shift+Return
+
+# kill focused window
++q
+
+# Application menu - wofi:
++d
+
+# Activities:
++p
+
+# Power-Menu:
++Shift+e
+
+# Lock the system
++f1
+
+# reload the configuration file
++Shift+c
+
+# change window focus,like vim
++h focus left
++j focus down
++k focus up
++l focus right
+
+# alternatively, you can use the cursor keys:
++Left focus left
++Down focus down
++Up focus up
++Right focus right
+
+# move a focused window
++Shift+h move left
++Shift+j move down
++Shift+k move up
++Shift+l move right
+
+# alternatively, you can use the cursor keys:
++Shift+Left move left
++Shift+Down move down
++Shift+Up move up
++Shift+Right move right
+
+# split in horizontal orientation (changes take place on next opened window):
++b
+
+# split in vertical orientation (changes take place on next opened window):
++v
+
+# enter fullscreen mode for the focused container:
++f fullscreen toggle
+
+# change container layout (stacked, tabbed, toggle split):
++s layout stacking
++w layout tabbed
++e layout toggle split
+
+# toggle tiling / floating:
++Shift+space floating toggle
+
+# change focus between tiling / floating windows:
++space focus mode_toggle
+
+# focus the parent container:
++a focus parent
+
+# resize floating window:
++right mouse button
+
+# move floating window:
++left mouse button
+
+# scratchpad:
++Shift+Minus move scratchpad
++minus scratchpad cycle
+
+# resize mode:
++r
+
+# resize,like vim:
+h focus left
+j focus down
+k focus up
+l focus right
+
+# alternatively, you can use the cursor keys:
+Left focus left
+Down focus down
+Up focus up
+Right focus right
+
+# Return to default mode:
+Return or Escape
+
+# Workspaces:
+#
+ # Switch to workspace
+ +1 workspace number 1
+ +2 workspace number 2
+ +3 workspace number 3
+ +4 workspace number 4
+ +5 workspace number 5
+ +6 workspace number 6
+ +7 workspace number 7
+ +8 workspace number 8
+ +9 workspace number 9
+ +0 workspace number 10
+ # Move focused container to workspace:
+ +Shift+1 move container to workspace number 1
+ +Shift+2 move container to workspace number 2
+ +Shift+3 move container to workspace number 3
+ +Shift+4 move container to workspace number 4
+ +Shift+5 move container to workspace number 5
+ +Shift+6 move container to workspace number 6
+ +Shift+7 move container to workspace number 7
+ +Shift+8 move container to workspace number 8
+ +Shift+9 move container to workspace number 9
+ +Shift+0 move container to workspace number 10
+
+
+# Multimedia Keys (be aware that these may not work for every keyboard):
+They are enabled - you may need to hold down the function key while doing so.
+
+ # Screenshots:
+ PrintSrc for full screenshot
+ Shift+PrintSrc for screenshot options
+
+# App Shortcuts:
++n thunar
++o firefox
+
+
+# Other Things:
+
+ # Input - ~/.config/sway/config.d/input
+ # You can get the names of your inputs by running: swaymsg -t get_inputs
+ # Put your touchpad's IDENFICATOR to replace "Touchpad-ID" (keep the quotation marks)
+ # Read `man 5 sway-input` for more information about this section.
+
+ # Output - ~/.config/sway/config.d/output
+ # You can get the names of your outputs by running: swaymsg -t get_outputs
+ # Read `man 5 sway-output` for more information about this section.
+
+ # Wallpaper - ~/.config/sway/config.d/theme
+ # exec swaybg -i /path/to/wallpaper
+
+ # Waybar - ~/.config/waybar/config : ~/.config/waybar/style.css
+ # It is an external bar we have chosen because of the option's it allows.
+ # If you wish to use the default swaybar - ~/.config/sway/config.d/theme and change waybar to sway-bar
+ # Read `man 5 sway-bar` for more information about this section
+
+ # Autostart - ~/.config/sway/config.d/autostart_applications
+
+
+
+
+
diff --git a/scrappy/dotfiles/sway/config b/scrappy/dotfiles/sway/config
new file mode 100644
index 0000000..bf26ee3
--- /dev/null
+++ b/scrappy/dotfiles/sway/config
@@ -0,0 +1,12 @@
+# Initial Setup
+# exec ~/set_once.sh
+
+# Config for sway
+#
+# Read `man 5 sway` for a complete reference.
+
+# user config directory
+include $HOME/.config/sway/config.d/*
+
+# only enable this if every app you use is compatible with wayland
+# xwayland disable
diff --git a/scrappy/dotfiles/sway/config.d/application_defaults b/scrappy/dotfiles/sway/config.d/application_defaults
new file mode 100644
index 0000000..3bff6ba
--- /dev/null
+++ b/scrappy/dotfiles/sway/config.d/application_defaults
@@ -0,0 +1,54 @@
+# Assign workspaces
+assign [app_id="firefox"] 2
+for_window [app_id="firefox"] focus
+
+assign [class="firefox"] 2
+for_window [class="firefox"] focus
+
+assign [app_id=thunar] 3
+for_window [app_id=thunar] focus
+
+assign [class="Telegram"] 4
+for_window [class="Telegram"] focus
+
+
+for_window [app_id="xed"] focus
+
+# default keepass main window to scratch
+for_window [app_id="org.keepassxc.KeePassXC"] $floating_window
+for_window [app_id="org.keepassxc.KeePassXC" title="KeePassXC"] move to scratchpad #, scratchpad show # default to show
+
+# set floating (nontiling) for apps needing it:
+for_window [class="Yad" instance="yad"] floating enable
+for_window [app_id="yad"] floating enable
+for_window [app_id="blueman-manager"] floating enable, resize set width 40 ppt height 30 ppt
+
+# set floating (nontiling) for special apps:
+for_window [class="Xsane" instance="xsane"] floating enable
+for_window [app_id="pavucontrol" ] floating enable, resize set width 40 ppt height 30 ppt
+for_window [class="qt5ct" instance="qt5ct"] floating enable, resize set width 60 ppt height 50 ppt
+for_window [class="Bluetooth-sendto" instance="bluetooth-sendto"] floating enable
+for_window [app_id="pamac-manager"] floating enable, resize set width 80 ppt height 70 ppt
+for_window [class="Lxappearance"] floating enable, resize set width 60 ppt height 50 ppt
+for_window [class="steam" title="^((?!Steam$).)*"] floating enable
+
+# set floating for window roles
+for_window [window_role="pop-up"] floating enable
+for_window [window_role="bubble"] floating enable
+for_window [window_role="task_dialog"] floating enable
+for_window [window_role="Preferences"] floating enable
+for_window [window_type="dialog"] floating enable
+for_window [window_type="menu"] floating enable
+for_window [window_role="About"] floating enable
+for_window [title="File Operation Progress"] floating enable, border pixel 1, sticky enable, resize set width 40 ppt height 30 ppt
+for_window [app_id="firefox" title="^Library$"] floating enable, border pixel 1, sticky enable, resize set width 40 ppt height 30 ppt
+for_window [app_id="floating_shell_portrait"] floating enable, border pixel 1, sticky enable, resize set width 30 ppt height 40 ppt
+for_window [title="Picture in picture"] floating enable, sticky enable
+for_window [title="nmtui"] floating enable, resize set width 50 ppt height 70 ppt
+for_window [app_id="xsensors"] floating enable
+for_window [title="Save File"] floating enable
+for_window [app_id="firefox" title="Firefox — Sharing Indicator"] kill
+
+# Inhibit idle
+for_window [app_id="firefox"] inhibit_idle fullscreen
+for_window [app_id="Chromium"] inhibit_idle fullscreen
diff --git a/scrappy/dotfiles/sway/config.d/autostart_applications b/scrappy/dotfiles/sway/config.d/autostart_applications
new file mode 100644
index 0000000..1e35c37
--- /dev/null
+++ b/scrappy/dotfiles/sway/config.d/autostart_applications
@@ -0,0 +1,22 @@
+# Auth with polkit-gnome:
+exec lxqt-policykit-agent
+
+# Desktop notifications
+exec mako
+
+# Network Applet
+exec nm-applet --indicator
+
+# GTK3 applications take a long time to start
+exec systemctl --user import-environment DISPLAY WAYLAND_DISPLAY SWAYSOCK
+exec hash dbus-update-activation-environment 2>/dev/null && \
+ dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY SWAYSOCK
+
+# Sway Fader
+# exec python3 ~/.config/sway/scripts/swayfader.py
+
+# gpu controller
+exec corectrl
+
+exec keepassxc
+exec kdeconnect-indicator
diff --git a/scrappy/dotfiles/sway/config.d/clamshell b/scrappy/dotfiles/sway/config.d/clamshell
new file mode 100644
index 0000000..cd7cc46
--- /dev/null
+++ b/scrappy/dotfiles/sway/config.d/clamshell
@@ -0,0 +1,6 @@
+# Clamshell Mode
+set $laptop eDP-1
+bindswitch --reload --locked lid:on output $laptop disable
+bindswitch --reload --locked lid:off output $laptop enable
+
+exec_always ~/.config/sway/scripts/clamshell.sh
diff --git a/scrappy/dotfiles/sway/config.d/default b/scrappy/dotfiles/sway/config.d/default
new file mode 100644
index 0000000..01ddd9b
--- /dev/null
+++ b/scrappy/dotfiles/sway/config.d/default
@@ -0,0 +1,233 @@
+# Logo key. Use Mod1 for Alt.
+set $mod Mod4
+
+# Home row direction keys, like vim
+set $left n
+set $down i
+set $up e
+set $right o
+
+# audio control
+set $sink_volume pactl get-sink-volume @DEFAULT_SINK@ | grep '^Volume:' | cut -d / -f 2 | tr -d ' ' | sed 's/%//'
+set $source_volume pactl get-source-volume @DEFAULT_SOURCE@ | grep '^Volume:' | cut -d / -f 2 | tr -d ' ' | sed 's/%//'
+set $volume_down $(pactl set-sink-volume @DEFAULT_SINK@ -5% && $sink_volume)
+set $volume_up $(pactl set-sink-volume @DEFAULT_SINK@ +5% && $sink_volume)
+set $volume_mute $(pactl set-sink-mute @DEFAULT_SINK@ toggle && pactl get-sink-mute @DEFAULT_SINK@ | sed -En "/no/ s/.*/$($sink_volume)/p; /yes/ s/.*/0/p")
+set $mic_mute $(pactl set-source-mute @DEFAULT_SOURCE@ toggle && pactl get-source-mute @DEFAULT_SOURCE@ | sed -En "/no/ s/.*/$($source_volume)/p; /yes/ s/.*/0/p")
+
+# Your preferred terminal emulators
+set $term-float foot
+
+# Your preferred application launcher
+# Note: pass the final command to swaymsg so that the resulting window can be opened
+# on the original workspace that the command was run on.
+set $menu wofi -c ~/.config/wofi/config -I
+
+set $powermenu ~/.config/waybar/scripts/power-menu.sh
+
+### Idle configuration
+exec swayidle -w\
+ # timeout 1130 'swaylock -C ~/.config/swaylock/config --grace 28 --effect-blur 2x10 --fade-in 0.3'\
+ timeout 600 'exec systemctl suspend'\
+ before-sleep 'swaylock -C ~/.config/swaylock/config' --grace 10 --effect-blur 2x10 --fade-in 0.3'
+
+# This will lock the screen after 9m and 30s of inactivity, but with a 30 second
+# grace period, during which any input will stop the system from suspending.
+# Otherwise, the system locks the screen as it enters suspend.
+
+## Lock Screen
+ bindsym $mod+f1 exec ~/.config/sway/scripts/lockman.sh
+
+### Key bindings
+#
+# Basics:
+#
+ # Start a floating terminal
+ bindsym $mod+Return exec $term-float
+
+ # Open the power menu
+ bindsym $mod+Shift+Escape exec $powermenu
+
+ # Kill focused window
+ bindsym $mod+q kill
+
+ # Start your launcher
+ bindsym $mod+d exec $menu
+
+ # Activities
+ #bindsym $mod+p exec ~/.config/wofi/windows.py
+
+ # Drag floating windows by holding down $mod and left mouse button.
+ # Resize them with right mouse button + $mod.
+ # Despite the name, also works for non-floating windows.
+ # Change normal to inverse to use left mouse button for resizing and right
+ # mouse button for dragging.
+ floating_modifier $mod normal
+
+ # Reload the configuration file
+ bindsym $mod+Shift+c reload
+
+#
+# Moving around:
+#
+ # your focus around
+ bindsym $mod+$left focus left
+ bindsym $mod+$down focus down
+ bindsym $mod+$up focus up
+ bindsym $mod+$right focus right
+ # Or use $mod+[up|down|left|right]
+
+ # bindsym $mod+Left focus left
+ # bindsym $mod+Down focus down
+ # bindsym $mod+Up focus up
+ # bindsym $mod+Right focus right
+
+ # Move the focused window with the same, but add Shift
+ # bindsym $mod+Shift+$left move left
+ # bindsym $mod+Shift+$down move down
+ # bindsym $mod+Shift+$up move up
+ # bindsym $mod+Shift+$right move right
+ # Ditto, with arrow keys
+ bindsym $mod+Left move left
+ bindsym $mod+Down move down
+ bindsym $mod+Up move up
+ bindsym $mod+Right move right
+#
+# Workspaces:
+#
+ # Switch to workspace
+ bindsym $mod+1 workspace number 1
+ bindsym $mod+2 workspace number 2
+ bindsym $mod+3 workspace number 3
+ bindsym $mod+4 workspace number 4
+ bindsym $mod+5 workspace number 5
+ bindsym $mod+6 workspace number 6
+ bindsym $mod+7 workspace number 7
+ bindsym $mod+8 workspace number 8
+ bindsym $mod+9 workspace number 9
+ bindsym $mod+0 workspace number 10
+ # Move focused container to workspace
+ bindsym $mod+Shift+1 move container to workspace number 1
+ bindsym $mod+Shift+2 move container to workspace number 2
+ bindsym $mod+Shift+3 move container to workspace number 3
+ bindsym $mod+Shift+4 move container to workspace number 4
+ bindsym $mod+Shift+5 move container to workspace number 5
+ bindsym $mod+Shift+6 move container to workspace number 6
+ bindsym $mod+Shift+7 move container to workspace number 7
+ bindsym $mod+Shift+8 move container to workspace number 8
+ bindsym $mod+Shift+9 move container to workspace number 9
+ bindsym $mod+Shift+0 move container to workspace number 10
+ # Note: workspaces can have any name you want, not just numbers.
+ # We just use 1-10 as the default.
+#
+# Layout stuff:
+#
+ # You can "split" the current object of your focus with
+ # $mod+b or $mod+v, for horizontal and vertical splits
+ # respectively.
+ bindsym $mod+h splith
+ bindsym $mod+v splitv
+
+ # Switch the current container between different layout styles
+ bindsym $mod+Shift+s layout stacking
+ bindsym $mod+Shift+t layout tabbed
+ bindsym $mod+Shift+r layout toggle split
+
+ # Make the current focus fullscreen
+ bindsym $mod+f fullscreen
+
+ # Toggle the current focus between tiling and floating mode
+ bindsym $mod+Shift+space floating toggle
+
+ # Swap focus between the tiling area and the floating area
+ bindsym $mod+space focus mode_toggle
+
+ # Move focus to the parent container
+ bindsym $mod+a focus parent
+
+ # bindsym $mod+g exec ~/.config/sway/scripts/scale.sh inc
+ # bindsym $mod+m exec ~/.config/sway/scripts/scale.sh dec
+
+#
+# Scratchpad:
+#
+ # Sway has a "scratchpad", which is a bag of holding for windows.
+ # You can send windows there and get them back later.
+
+ # Move the currently focused window to the scratchpad
+ bindsym $mod+Shift+minus move scratchpad
+
+ # Show the next scratchpad window or hide the focused scratchpad window.
+ # If there are multiple scratchpad windows, this command cycles through them.
+ bindsym $mod+minus scratchpad show
+#
+# Resizing containers:
+#
+mode "resize" {
+ # left will shrink the containers width
+ # right will grow the containers width
+ # up will shrink the containers height
+ # down will grow the containers height
+ bindsym $left resize shrink width 50px
+ bindsym $right resize grow width 50px
+ bindsym $up resize shrink height 50px
+ bindsym $down resize grow height 50px
+
+ # Ditto, with arrow keys
+ bindsym Left resize shrink width 50px
+ bindsym Right resize grow width 50px
+ bindsym Up resize shrink height 50px
+ bindsym Down resize grow height 50px
+
+ # Return to default mode
+ bindsym Return mode "default"
+ bindsym Escape mode "default"
+}
+
+bindsym $mod+r mode "resize"
+
+# Resize floating windows with mouse scroll:
+ bindsym --whole-window --border $mod+button4 resize shrink height 5 px or 5 ppt
+ bindsym --whole-window --border $mod+button5 resize grow height 5 px or 5 ppt
+ bindsym --whole-window --border $mod+Shift+button4 resize shrink width 5 px or 5 ppt
+ bindsym --whole-window --border $mod+Shift+button5 resize grow width 5 px or 5 ppt
+
+#
+# Volume
+#
+ # Control volume trough pamixer
+ # bindsym --locked XF86AudioRaiseVolume exec pamixer -ui 2
+ # bindsym --locked XF86AudioLowerVolume exec pamixer -ud 2
+ # bindsym --locked XF86AudioMute exec pamixer -t
+
+ # Control volume directly trough pactl
+ bindsym --locked XF86AudioRaiseVolume exec $volume_up
+ bindsym --locked XF86AudioLowerVolume exec $volume_down
+ bindsym --locked XF86AudioMute exec $volume_mute
+#
+# Player
+#
+ bindsym XF86AudioPlay exec playerctl play
+ bindsym XF86AudioPause exec playerctl pause
+ bindsym XF86AudioNext exec playerctl next
+ bindsym XF86AudioPrev exec playerctl previous
+#
+# Backlight
+#
+ bindsym XF86MonBrightnessUp exec brightnessctl -c backlight set +5%
+ bindsym XF86MonBrightnessDown exec brightnessctl -c backlight set 5%-
+#
+# App shortcuts
+#
+ bindsym $mod+t exec thunar
+ bindsym $mod+w exec firefox
+ bindsym $mod+j exec obsidian & ~/Documents/Obsidian Vault/auto-add.sh
+#
+# Screenshots
+#
+ bindsym $mod+Shift+p exec ~/.config/sway/scripts/screenshot.sh clipboard
+ bindsym $mod+p exec ~/.config/sway/scripts/screenshot.sh
+#
+# Keybindings List
+#
+ #bindsym $mod+t exec xed ~/.config/sway/cheatsheet
diff --git a/scrappy/dotfiles/sway/config.d/input b/scrappy/dotfiles/sway/config.d/input
new file mode 100644
index 0000000..9e31cd4
--- /dev/null
+++ b/scrappy/dotfiles/sway/config.d/input
@@ -0,0 +1,30 @@
+### Input configuration
+#
+# Example configuration:
+# You can get the names of your inputs by running: swaymsg -t get_inputs
+# Put your touchpad's ID to replace "Touchpad-ID" (keep the quotation marks)
+
+input type:touchpad {
+ dwt enabled
+ tap enabled
+ natural_scroll enabled
+}
+
+# Read `man 5 sway-input` for more information about this section.
+#
+#input type:keyboard xkb_layout "us"
+input * {
+ xkb_layout "us"
+ # xkb_variant "colemak_dh"
+ # xkb_options "ctrl:nocaps"
+}
+
+input type:keyboard {
+ repeat_rate 40
+ repeat_delay 175
+}
+
+exec_always {
+ 'swaymsg input type:keyboard xkb_layout "$(localectl status | grep "X11 Layout" | sed -e "s/^.*X11 Layout://")"'
+ 'swaymsg input type:keyboard xkb_variant "$(localectl status | grep "X11 Variant" | sed -e "s/^.*X11 Variant://")"'
+}
diff --git a/scrappy/dotfiles/sway/config.d/output b/scrappy/dotfiles/sway/config.d/output
new file mode 100644
index 0000000..b8d6e7a
--- /dev/null
+++ b/scrappy/dotfiles/sway/config.d/output
@@ -0,0 +1,13 @@
+### Output configuration
+#
+# Example configuration:
+#
+# output HDMI-A-1 resolution 1920x1080 position 1920,0
+#
+# You can get the names of your outputs by running: swaymsg -t get_outputs
+#
+# Wacom Tablet - Example
+# input "1386:884:Wacom_Intuos_S_Pad" map_to_output HDMI-A-1
+# input "1386:884:Wacom_Intuos_S_Pen" map_to_output HDMI-A-1
+output DP-3 resolution 3840x2160@240.084Hz position 0,0
+output * adaptive_sync off
diff --git a/scrappy/dotfiles/sway/config.d/theme b/scrappy/dotfiles/sway/config.d/theme
new file mode 100644
index 0000000..d0d114e
--- /dev/null
+++ b/scrappy/dotfiles/sway/config.d/theme
@@ -0,0 +1,103 @@
+# Apply gtk theming
+exec_always ~/.config/sway/scripts/import-gsettings
+
+set $rosewater #f4dbd6
+set $flamingo #f0c6c6
+set $pink #f5bde6
+set $mauve #c6a0f6
+set $red #ed8796
+set $maroon #ee99a0
+set $peach #f5a97f
+set $green #a6da95
+set $teal #8bd5ca
+set $sky #91d7e3
+set $sapphire #7dc4e4
+set $blue #8aadf4
+set $lavender #b7bdf8
+set $text #cad3f5
+set $subtext1 #b8c0e0
+set $subtext0 #a5adcb
+set $overlay2 #939ab7
+set $overlay1 #8087a2
+set $overlay0 #6e738d
+set $surface2 #5b6078
+set $surface1 #494d64
+set $surface0 #363a4f
+set $base #24273a
+set $mantle #1e2030
+set $crust #181926
+
+# Set inner/outer gaps
+gaps inner 6
+gaps outer 4
+
+# Hide titlebar on windows:
+default_border pixel 2
+
+# Default Font
+font pango:Overpass Nerd Font 12
+
+# Thin borders:
+smart_borders on
+
+# Set wallpaper:
+exec_always swaybg -i /home/nate/.config/sway/wallpapers/nix-black-4k.png
+# exec_always /home/nate/.config/sway/scripts/background.sh
+
+# Title format for windows
+for_window [shell="xdg_shell"] title_format "%title (%app_id)"
+for_window [shell="x_wayland"] title_format "%class - %title"
+
+# class border bground text indicator child_border
+# client.focused #e5e9f0 #e5e9f0 #3b4252 #e5e9f0 #e5e9f0
+# client.focused_inactive #5e81ac #5e81ac #eceff4 #5e81ac #3b4252
+# client.unfocused #3b4252 #3b4252 #BFBFBF #3b4252 #3b4252
+# client.urgent #d08770 #d08770 #eceff4 #d08770 #d08770
+# client.placeholder #282A36 #282A36 #eceff4 #282A36 #282A36
+# client.background #F8F8F2
+
+
+client.focused $flamingo $base $text $rosewater $flamingo
+client.focused_inactive $overlay0 $base $text $rosewater $overlay0
+client.unfocused $overlay0 $base $text $rosewater $overlay0
+client.urgent $peach $base $peach $overlay0 $peach
+client.placeholder $overlay0 $base $text $overlay0 $overlay0
+client.background $base
+#
+# Status Bar:
+#
+# Read `man 5 sway-bar` for more information about this section.
+bar {
+ swaybar_command waybar
+}
+
+set $opacity 0.8
+set $floating_window floating enable, resize set width 1030 height 710, opacity 1.0
+
+for_window {
+ [class=".*"] opacity 1.0
+ [app_id=".*"] opacity 1.0
+ [app_id="foot"] opacity $opacity
+ [app_id="thunar"] opacity $opacity
+
+ # Steam
+ [class="steam_app.*"] inhibit_idle fullscreen; floating enable; border none opacity 1.0
+ [class="steam"] opacity 1.0
+
+ # Godot windows
+ [title="(?:Create New|Select Frames|project.godot|node)"] $floating_window
+ [title="(?:Create Folder|Node Configuration|Warning|Please Confirm)"] $floating_window, resize set height 200
+
+ # Aseprite
+ [title="(?:Aseprite)"] opacity 1.0
+
+ # Floating windows
+ [title="(?:Open|Save|Save New|Open a) (?:File|Folder|As|Scene As)"] $floating_window
+ [window_role="pop-up"] $floating_window
+ [window_role="bubble"] $floating_window
+ [window_role="task_dialog"] $floating_window
+ [window_role="Preferences"] $floating_window
+ [window_type="dialog"] $floating_window
+ [window_type="menu"] $floating_window
+ [window_role="About"] $floating_window
+}
diff --git a/scrappy/dotfiles/sway/keyboard.conf b/scrappy/dotfiles/sway/keyboard.conf
new file mode 100644
index 0000000..0c034fd
--- /dev/null
+++ b/scrappy/dotfiles/sway/keyboard.conf
@@ -0,0 +1,457 @@
+! layout
+ us USA
+ ad Andorra
+ af Afghanistan
+ ara Arabic
+ al Albania
+ am Armenia
+ az Azerbaijan
+ by Belarus
+ be Belgium
+ bd Bangladesh
+ in India
+ ba Bosnia and Herzegovina
+ br Brazil
+ bg Bulgaria
+ ma Morocco
+ mm Myanmar
+ ca Canada
+ cd Congo, Democratic Republic of the
+ cn China
+ hr Croatia
+ cz Czechia
+ dk Denmark
+ nl Netherlands
+ bt Bhutan
+ ee Estonia
+ ir Iran
+ iq Iraq
+ fo Faroe Islands
+ fi Finland
+ fr France
+ gh Ghana
+ gn Guinea
+ ge Georgia
+ de Germany
+ gr Greece
+ hu Hungary
+ is Iceland
+ il Israel
+ it Italy
+ jp Japan
+ kg Kyrgyzstan
+ kh Cambodia
+ kz Kazakhstan
+ la Laos
+ latam Latin American
+ lt Lithuania
+ lv Latvia
+ mao Maori
+ me Montenegro
+ mk Macedonia
+ mt Malta
+ mn Mongolia
+ no Norway
+ pl Poland
+ pt Portugal
+ ro Romania
+ ru Russia
+ rs Serbia
+ si Slovenia
+ sk Slovakia
+ es Spain
+ se Sweden
+ ch Switzerland
+ sy Syria
+ tj Tajikistan
+ lk Sri Lanka
+ th Thailand
+ tr Turkey
+ tw Taiwan
+ ua Ukraine
+ gb United Kingdom
+ uz Uzbekistan
+ vn Vietnam
+ kr Korea, Republic of
+ nec_vndr/jp Japan (PC-98xx Series)
+ ie Ireland
+ pk Pakistan
+ mv Maldives
+ za South Africa
+ epo Esperanto
+ np Nepal
+ ng Nigeria
+ et Ethiopia
+ sn Senegal
+ brai Braille
+ tm Turkmenistan
+ ml Mali
+ tz Tanzania
+
+! variant
+ chr us: Cherokee
+ euro us: With EuroSign on 5
+ intl us: International (with dead keys)
+ alt-intl us: Alternative international (former us_intl)
+ colemak us: Colemak
+ dvorak us: Dvorak
+ dvorak-intl us: Dvorak international
+ dvorak-l us: Left handed Dvorak
+ dvorak-r us: Right handed Dvorak
+ dvorak-classic us: Classic Dvorak
+ dvp us: Programmer Dvorak
+ rus us: Russian phonetic
+ mac us: Macintosh
+ altgr-intl us: International (AltGr dead keys)
+ olpc2 us: Group toggle on multiply/divide key
+ srp us: Serbian
+ ps af: Pashto
+ uz af: Southern Uzbek
+ olpc-ps af: OLPC Pashto
+ olpc-fa af: OLPC Dari
+ olpc-uz af: OLPC Southern Uzbek
+ azerty ara: azerty
+ azerty_digits ara: azerty/digits
+ digits ara: digits
+ qwerty ara: qwerty
+ qwerty_digits ara: qwerty/digits
+ buckwalter ara: Buckwalter
+ phonetic am: Phonetic
+ phonetic-alt am: Alternative Phonetic
+ eastern am: Eastern
+ western am: Western
+ eastern-alt am: Alternative Eastern
+ cyrillic az: Cyrillic
+ legacy by: Legacy
+ latin by: Latin
+ oss be: Alternative
+ oss_latin9 be: Alternative, latin-9 only
+ oss_sundeadkeys be: Alternative, Sun dead keys
+ iso-alternate be: ISO Alternate
+ nodeadkeys be: Eliminate dead keys
+ sundeadkeys be: Sun dead keys
+ wang be: Wang model 724 azerty
+ probhat bd: Probhat
+ ben in: Bengali
+ ben_probhat in: Bengali Probhat
+ guj in: Gujarati
+ guru in: Gurmukhi
+ jhelum in: Gurmukhi Jhelum
+ kan in: Kannada
+ mal in: Malayalam
+ mal_lalitha in: Malayalam Lalitha
+ ori in: Oriya
+ tam_unicode in: Tamil Unicode
+ tam_keyboard_with_numerals in: Tamil Keyboard with Numerals
+ tam_TAB in: Tamil TAB Typewriter
+ tam_TSCII in: Tamil TSCII Typewriter
+ tam in: Tamil
+ tel in: Telugu
+ urd-phonetic in: Urdu, Phonetic
+ urd-phonetic3 in: Urdu, Alternative phonetic
+ urd-winkeys in: Urdu, Winkeys
+ bolnagri in: Hindi Bolnagri
+ hin-wx in: Hindi Wx
+ alternatequotes ba: Use guillemets for quotes
+ unicode ba: Use Bosnian digraphs
+ unicodeus ba: US keyboard with Bosnian digraphs
+ us ba: US keyboard with Bosnian letters
+ nodeadkeys br: Eliminate dead keys
+ dvorak br: Dvorak
+ nativo br: Nativo
+ nativo-us br: Nativo for USA keyboards
+ nativo-epo br: Nativo for Esperanto
+ phonetic bg: Traditional phonetic
+ bas_phonetic bg: New phonetic
+ french ma: French
+ tifinagh ma: Tifinagh
+ tifinagh-alt ma: Tifinagh Alternative
+ tifinagh-alt-phonetic ma: Tifinagh Alternative Phonetic
+ tifinagh-extended ma: Tifinagh Extended
+ tifinagh-phonetic ma: Tifinagh Phonetic
+ tifinagh-extended-phonetic ma: Tifinagh Extended Phonetic
+ fr-dvorak ca: French Dvorak
+ fr-legacy ca: French (legacy)
+ multix ca: Multilingual
+ multi ca: Multilingual, first part
+ multi-2gr ca: Multilingual, second part
+ ike ca: Inuktitut
+ shs ca: Secwepemctsin
+ kut ca: Ktunaxa
+ eng ca: English
+ tib cn: Tibetan
+ tib_asciinum cn: Tibetan (with ASCII numerals)
+ alternatequotes hr: Use guillemets for quotes
+ unicode hr: Use Croatian digraphs
+ unicodeus hr: US keyboard with Croatian digraphs
+ us hr: US keyboard with Croatian letters
+ bksl cz: With <\|> key
+ qwerty cz: qwerty
+ qwerty_bksl cz: qwerty, extended Backslash
+ ucw cz: UCW layout (accented letters only)
+ dvorak-ucw cz: US Dvorak with CZ UCW support
+ nodeadkeys dk: Eliminate dead keys
+ mac dk: Macintosh
+ mac_nodeadkeys dk: Macintosh, eliminate dead keys
+ dvorak dk: Dvorak
+ sundeadkeys nl: Sun dead keys
+ mac nl: Macintosh
+ std nl: Standard
+ nodeadkeys ee: Eliminate dead keys
+ dvorak ee: Dvorak
+ us ee: US keyboard with Estonian letters
+ pes_keypad ir: Persian, with Persian Keypad
+ ku ir: Kurdish, Latin Q
+ ku_f ir: Kurdish, (F)
+ ku_alt ir: Kurdish, Latin Alt-Q
+ ku_ara ir: Kurdish, Arabic-Latin
+ ku iq: Kurdish, Latin Q
+ ku_f iq: Kurdish, (F)
+ ku_alt iq: Kurdish, Latin Alt-Q
+ ku_ara iq: Kurdish, Arabic-Latin
+ nodeadkeys fo: Eliminate dead keys
+ nodeadkeys fi: Eliminate dead keys
+ smi fi: Northern Saami
+ classic fi: Classic
+ mac fi: Macintosh
+ nodeadkeys fr: Eliminate dead keys
+ sundeadkeys fr: Sun dead keys
+ oss fr: Alternative
+ oss_latin9 fr: Alternative, latin-9 only
+ oss_nodeadkeys fr: Alternative, eliminate dead keys
+ oss_sundeadkeys fr: Alternative, Sun dead keys
+ latin9 fr: (Legacy) Alternative
+ latin9_nodeadkeys fr: (Legacy) Alternative, eliminate dead keys
+ latin9_sundeadkeys fr: (Legacy) Alternative, Sun dead keys
+ bepo fr: Bepo, ergonomic, Dvorak way
+ bepo_latin9 fr: Bepo, ergonomic, Dvorak way, latin-9 only
+ dvorak fr: Dvorak
+ mac fr: Macintosh
+ bre fr: Breton
+ oci fr: Occitan
+ geo fr: Georgian AZERTY Tskapo
+ generic gh: Multilingual
+ akan gh: Akan
+ ewe gh: Ewe
+ fula gh: Fula
+ ga gh: Ga
+ hausa gh: Hausa
+ ergonomic ge: Ergonomic
+ mess ge: MESS
+ ru ge: Russian
+ os ge: Ossetian
+ deadacute de: Dead acute
+ deadgraveacute de: Dead grave acute
+ nodeadkeys de: Eliminate dead keys
+ ro de: Romanian keyboard with German letters
+ ro_nodeadkeys de: Romanian keyboard with German letters, eliminate dead keys
+ dvorak de: Dvorak
+ sundeadkeys de: Sun dead keys
+ neo de: Neo 2
+ mac de: Macintosh
+ mac_nodeadkeys de: Macintosh, eliminate dead keys
+ dsb de: Lower Sorbian
+ dsb_qwertz de: Lower Sorbian (qwertz)
+ qwerty de: qwerty
+ simple gr: Simple
+ extended gr: Extended
+ nodeadkeys gr: Eliminate dead keys
+ polytonic gr: Polytonic
+ standard hu: Standard
+ nodeadkeys hu: Eliminate dead keys
+ qwerty hu: qwerty
+ 101_qwertz_comma_dead hu: 101/qwertz/comma/Dead keys
+ 101_qwertz_comma_nodead hu: 101/qwertz/comma/Eliminate dead keys
+ 101_qwertz_dot_dead hu: 101/qwertz/dot/Dead keys
+ 101_qwertz_dot_nodead hu: 101/qwertz/dot/Eliminate dead keys
+ 101_qwerty_comma_dead hu: 101/qwerty/comma/Dead keys
+ 101_qwerty_comma_nodead hu: 101/qwerty/comma/Eliminate dead keys
+ 101_qwerty_dot_dead hu: 101/qwerty/dot/Dead keys
+ 101_qwerty_dot_nodead hu: 101/qwerty/dot/Eliminate dead keys
+ 102_qwertz_comma_dead hu: 102/qwertz/comma/Dead keys
+ 102_qwertz_comma_nodead hu: 102/qwertz/comma/Eliminate dead keys
+ 102_qwertz_dot_dead hu: 102/qwertz/dot/Dead keys
+ 102_qwertz_dot_nodead hu: 102/qwertz/dot/Eliminate dead keys
+ 102_qwerty_comma_dead hu: 102/qwerty/comma/Dead keys
+ 102_qwerty_comma_nodead hu: 102/qwerty/comma/Eliminate dead keys
+ 102_qwerty_dot_dead hu: 102/qwerty/dot/Dead keys
+ 102_qwerty_dot_nodead hu: 102/qwerty/dot/Eliminate dead keys
+ Sundeadkeys is: Sun dead keys
+ nodeadkeys is: Eliminate dead keys
+ mac is: Macintosh
+ dvorak is: Dvorak
+ lyx il: lyx
+ phonetic il: Phonetic
+ biblical il: Biblical Hebrew (Tiro)
+ nodeadkeys it: Eliminate dead keys
+ mac it: Macintosh
+ us it: US keyboard with Italian letters
+ geo it: Georgian
+ kana jp: Kana
+ OADG109A jp: OADG 109A
+ mac jp: Macintosh
+ phonetic kg: Phonetic
+ ruskaz kz: Russian with Kazakh
+ kazrus kz: Kazakh with Russian
+ basic la: Laos
+ stea la: Laos - STEA (proposed standard layout)
+ nodeadkeys latam: Eliminate dead keys
+ deadtilde latam: Include dead tilde
+ sundeadkeys latam: Sun dead keys
+ std lt: Standard
+ us lt: US keyboard with Lithuanian letters
+ ibm lt: IBM (LST 1205-92)
+ lekp lt: LEKP
+ lekpa lt: LEKPa
+ apostrophe lv: Apostrophe (') variant
+ tilde lv: Tilde (~) variant
+ fkey lv: F-letter (F) variant
+ cyrillic me: Cyrillic
+ cyrillicyz me: Cyrillic, Z and ZHE swapped
+ latinunicode me: Latin unicode
+ latinyz me: Latin qwerty
+ latinunicodeyz me: Latin unicode qwerty
+ cyrillicalternatequotes me: Cyrillic with guillemets
+ latinalternatequotes me: Latin with guillemets
+ nodeadkeys mk: Eliminate dead keys
+ us mt: Maltese keyboard with US layout
+ nodeadkeys no: Eliminate dead keys
+ dvorak no: Dvorak
+ smi no: Northern Saami
+ smi_nodeadkeys no: Northern Saami, eliminate dead keys
+ mac no: Macintosh
+ mac_nodeadkeys no: Macintosh, eliminate dead keys
+ qwertz pl: qwertz
+ dvorak pl: Dvorak
+ dvorak_quotes pl: Dvorak, Polish quotes on quotemark key
+ dvorak_altquotes pl: Dvorak, Polish quotes on key 1
+ csb pl: Kashubian
+ ru_phonetic_dvorak pl: Russian phonetic Dvorak
+ dvp pl: Programmer Dvorak
+ nodeadkeys pt: Eliminate dead keys
+ sundeadkeys pt: Sun dead keys
+ mac pt: Macintosh
+ mac_nodeadkeys pt: Macintosh, eliminate dead keys
+ mac_sundeadkeys pt: Macintosh, Sun dead keys
+ nativo pt: Nativo
+ nativo-us pt: Nativo for USA keyboards
+ nativo-epo pt: Nativo for Esperanto
+ cedilla ro: Cedilla
+ std ro: Standard
+ std_cedilla ro: Standard (Cedilla)
+ winkeys ro: Winkeys
+ crh_f ro: Crimean Tatar (Turkish F)
+ crh_alt ro: Crimean Tatar (Turkish Alt-Q)
+ crh_dobruca1 ro: Crimean Tatar (Dobruca-1 Q)
+ crh_dobruca2 ro: Crimean Tatar (Dobruca-2 Q)
+ phonetic ru: Phonetic
+ phonetic_winkeys ru: Phonetic Winkeys
+ typewriter ru: Typewriter
+ legacy ru: Legacy
+ typewriter-legacy ru: Typewriter, legacy
+ tt ru: Tatar
+ os_legacy ru: Ossetian, legacy
+ os_winkeys ru: Ossetian, Winkeys
+ cv ru: Chuvash
+ cv_latin ru: Chuvash Latin
+ udm ru: Udmurt
+ kom ru: Komi
+ sah ru: Yakut
+ xal ru: Kalmyk
+ dos ru: DOS
+ srp ru: Serbian
+ bak ru: Bashkirian
+ yz rs: Z and ZHE swapped
+ latin rs: Latin
+ latinunicode rs: Latin Unicode
+ latinyz rs: Latin qwerty
+ latinunicodeyz rs: Latin Unicode qwerty
+ alternatequotes rs: With guillemets
+ latinalternatequotes rs: Latin with guillemets
+ alternatequotes si: Use guillemets for quotes
+ us si: US keyboard with Slovenian letters
+ bksl sk: Extended Backslash
+ qwerty sk: qwerty
+ qwerty_bksl sk: qwerty, extended Backslash
+ nodeadkeys es: Eliminate dead keys
+ deadtilde es: Include dead tilde
+ sundeadkeys es: Sun dead keys
+ dvorak es: Dvorak
+ ast es: Asturian variant with bottom-dot H and bottom-dot L
+ cat es: Catalan variant with middle-dot L
+ mac es: Macintosh
+ nodeadkeys se: Eliminate dead keys
+ dvorak se: Dvorak
+ rus se: Russian phonetic
+ rus_nodeadkeys se: Russian phonetic, eliminate dead keys
+ smi se: Northern Saami
+ mac se: Macintosh
+ svdvorak se: Svdvorak
+ legacy ch: Legacy
+ de_nodeadkeys ch: German, eliminate dead keys
+ de_sundeadkeys ch: German, Sun dead keys
+ fr ch: French
+ fr_nodeadkeys ch: French, eliminate dead keys
+ fr_sundeadkeys ch: French, Sun dead keys
+ fr_mac ch: French (Macintosh)
+ de_mac ch: German (Macintosh)
+ syc sy: Syriac
+ syc_phonetic sy: Syriac phonetic
+ ku sy: Kurdish, Latin Q
+ ku_f sy: Kurdish, (F)
+ ku_alt sy: Kurdish, Latin Alt-Q
+ legacy tj: Legacy
+ tam_unicode lk: Tamil Unicode
+ tam_TAB lk: Tamil TAB Typewriter
+ tis th: TIS-820.2538
+ pat th: Pattachote
+ f tr: (F)
+ alt tr: Alt-Q
+ sundeadkeys tr: Sun dead keys
+ ku tr: Kurdish, Latin Q
+ ku_f tr: Kurdish, (F)
+ ku_alt tr: Kurdish, Latin Alt-Q
+ intl tr: International (with dead keys)
+ crh tr: Crimean Tatar (Turkish Q)
+ crh_f tr: Crimean Tatar (Turkish F)
+ crh_alt tr: Crimean Tatar (Turkish Alt-Q)
+ indigenous tw: Indigenous
+ saisiyat tw: Saisiyat
+ phonetic ua: Phonetic
+ typewriter ua: Typewriter
+ winkeys ua: Winkeys
+ legacy ua: Legacy
+ rstu ua: Standard RSTU
+ rstu_ru ua: Standard RSTU on Russian layout
+ homophonic ua: Homophonic
+ crh ua: Crimean Tatar (Turkish Q)
+ crh_f ua: Crimean Tatar (Turkish F)
+ crh_alt ua: Crimean Tatar (Turkish Alt-Q)
+ extd gb: Extended - Winkeys
+ intl gb: International (with dead keys)
+ dvorak gb: Dvorak
+ dvorakukp gb: Dvorak (UK Punctuation)
+ mac gb: Macintosh
+ colemak gb: Colemak
+ latin uz: Latin
+ crh uz: Crimean Tatar (Turkish Q)
+ crh_f uz: Crimean Tatar (Turkish F)
+ crh_alt uz: Crimean Tatar (Turkish Alt-Q)
+ kr104 kr: 101/104 key Compatible
+ CloGaelach ie: CloGaelach
+ UnicodeExpert ie: UnicodeExpert
+ ogam ie: Ogham
+ ogam_is434 ie: Ogham IS434
+ urd-crulp pk: CRULP
+ urd-nla pk: NLA
+ ara pk: Arabic
+ legacy epo: displaced semicolon and quote (obsolete)
+ igbo ng: Igbo
+ yoruba ng: Yoruba
+ hausa ng: Hausa
+ left_hand brai: Left hand
+ right_hand brai: Right hand
+ alt tm: Alt-Q
+ fr-oss ml: Français (France Alternative)
+ us-mac ml: English (USA Macintosh)
+ us-intl ml: English (USA International)
diff --git a/scrappy/dotfiles/sway/scripts/background.pid b/scrappy/dotfiles/sway/scripts/background.pid
new file mode 100644
index 0000000..d464190
--- /dev/null
+++ b/scrappy/dotfiles/sway/scripts/background.pid
@@ -0,0 +1 @@
+4639
diff --git a/scrappy/dotfiles/sway/scripts/background.sh b/scrappy/dotfiles/sway/scripts/background.sh
new file mode 100755
index 0000000..e5dbf5b
--- /dev/null
+++ b/scrappy/dotfiles/sway/scripts/background.sh
@@ -0,0 +1,30 @@
+#!/usr/bin/env bash
+PID_FILE="background.pid"
+WP_LOC="/home/nate/.config/sway/wallpapers"
+PREV_WP=""
+NEW_WP=$(ls $WP_LOC | sort -R | tail -n 1)
+transition[0]="any"
+transition[1]="wave"
+transition[2]="outer"
+transition[3]="wipe"
+transition[4]="center"
+size=${#transition[@]}
+
+swww kill
+
+swww init
+
+# echo $(pgrep -f background.sh) > $PID_FILE
+
+while true
+do
+ while [[ $PREV_WP == $NEW_WP ]]
+ do
+ NEW_WP=$(ls $WP_LOC | sort -R | tail -n 1)
+ done
+ index=$(($RANDOM % $size))
+ #echo "Picked $WP_LOC/$NEW_WP with effect ${transition[$index]}"
+ swww img $WP_LOC/$NEW_WP --transition-type ${transition[$index]}
+ PREV_WP=$NEW_WP
+ sleep 120
+done
diff --git a/scrappy/dotfiles/sway/scripts/clamshell.sh b/scrappy/dotfiles/sway/scripts/clamshell.sh
new file mode 100755
index 0000000..3445910
--- /dev/null
+++ b/scrappy/dotfiles/sway/scripts/clamshell.sh
@@ -0,0 +1,6 @@
+#!/usr/bin/bash
+if cat /proc/acpi/button/lid/*/state | grep -q open; then
+ swaymsg output eDP-1 enable
+else
+ swaymsg output eDP-1 disable
+fi
diff --git a/scrappy/dotfiles/sway/scripts/import-gsettings b/scrappy/dotfiles/sway/scripts/import-gsettings
new file mode 100755
index 0000000..5878046
--- /dev/null
+++ b/scrappy/dotfiles/sway/scripts/import-gsettings
@@ -0,0 +1,15 @@
+#!/usr/bin/env bash
+
+# usage: import-gsettings
+config="${XDG_CONFIG_HOME:-$HOME/.config}/gtk-3.0/settings.ini"
+if [ ! -f "$config" ]; then exit 1; fi
+
+gnome_schema="org.gnome.desktop.interface"
+gtk_theme="$(grep 'gtk-theme-name' "$config" | cut -d'=' -f2)"
+icon_theme="$(grep 'gtk-icon-theme-name' "$config" | cut -d'=' -f2)"
+cursor_theme="$(grep 'gtk-cursor-theme-name' "$config" | cut -d'=' -f2)"
+font_name="$(grep 'gtk-font-name' "$config" | cut -d'=' -f2)"
+gsettings set "$gnome_schema" gtk-theme "$gtk_theme"
+gsettings set "$gnome_schema" icon-theme "$icon_theme"
+gsettings set "$gnome_schema" cursor-theme "$cursor_theme"
+gsettings set "$gnome_schema" font-name "$font_name"
diff --git a/scrappy/dotfiles/sway/scripts/lockman.sh b/scrappy/dotfiles/sway/scripts/lockman.sh
new file mode 100755
index 0000000..69edccf
--- /dev/null
+++ b/scrappy/dotfiles/sway/scripts/lockman.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+# Times the screen off and puts it to background
+swayidle \
+ timeout 300 'swaymsg "output * power off"' \
+ resume 'swaymsg "output * power on"' &
+# Locks the screen immediately
+swaylock
+# Kills last background task so idle timer doesn't keep running
+kill %%
diff --git a/scrappy/dotfiles/sway/scripts/scale.sh b/scrappy/dotfiles/sway/scripts/scale.sh
new file mode 100755
index 0000000..bb4b3d2
--- /dev/null
+++ b/scrappy/dotfiles/sway/scripts/scale.sh
@@ -0,0 +1,32 @@
+#!/usr/bin/env bash
+
+SCALE_FILE="scale.txt"
+DIRNAME="/tmp/$(ls /tmp | grep scale.sh | head -n 1)"
+CUR_SCALE=$(swaymsg -t get_outputs | grep -oP "scale\": \K\d.\d+")
+NEW_SCALE=""
+
+if [[ $DIRNAME == "/tmp/" ]]; then
+ DIRNAME=$(mktemp -d "${TMPDIR:-/tmp/}$(basename $0).XXXXXXXXXXXX")
+ echo $CUR_SCALE > $DIRNAME/$SCALE_FILE
+else
+ CUR_SCALE=$(cat $DIRNAME/$SCALE_FILE)
+fi
+
+if [[ $1 == "inc" ]]; then
+ NEW_SCALE=$(echo $CUR_SCALE + 0.25 | bc)
+elif [[ $1 == "dec" ]]; then
+ NEW_SCALE=$(echo $CUR_SCALE - 0.25 | bc)
+else
+ echo "No op provided, pass in 'inc' or 'dec' to change scale"
+fi
+
+if [[ $NEW_SCALE < 0.50 ]]; then
+ NEW_SCALE=0.50
+elif [[ $NEW_SCALE > 2 ]]; then
+ NEW_SCALE=2.00
+fi
+
+echo $NEW_SCALE > $DIRNAME/$SCALE_FILE
+
+notify-send -t 1000 "Scale set to $NEW_SCALE"
+swaymsg "output * scale $NEW_SCALE"
diff --git a/scrappy/dotfiles/sway/scripts/screenshot.sh b/scrappy/dotfiles/sway/scripts/screenshot.sh
new file mode 100755
index 0000000..4221889
--- /dev/null
+++ b/scrappy/dotfiles/sway/scripts/screenshot.sh
@@ -0,0 +1,33 @@
+#!/usr/bin/env bash
+
+entries="Active Screen Output Area Window"
+
+selected=$(printf '%s\n' $entries | wofi --style=$HOME/.config/wofi/style.widgets.css --conf=$HOME/.config/wofi/config.screenshot | awk '{print tolower($1)}')
+
+if [ "$1" == "clipboard" ]; then
+ case $selected in
+ active)
+ grimshot --notify copy active;;
+ screen)
+ grimshot --notify copy screen;;
+ output)
+ grimshot --notify copy output;;
+ area)
+ grimshot --notify copy area;;
+ window)
+ grimshot --notify copy window;;
+ esac
+else
+ case $selected in
+ active)
+ grimshot --notify save active;;
+ screen)
+ grimshot --notify save screen;;
+ output)
+ grimshot --notify save output;;
+ area)
+ grimshot --notify save area;;
+ window)
+ grimshot --notify save window;;
+ esac
+fi
diff --git a/scrappy/dotfiles/sway/scripts/swayfader.py b/scrappy/dotfiles/sway/scripts/swayfader.py
new file mode 100755
index 0000000..b2920b6
--- /dev/null
+++ b/scrappy/dotfiles/sway/scripts/swayfader.py
@@ -0,0 +1,229 @@
+from i3ipc import Connection, Event
+from threading import Thread
+from time import sleep
+
+
+FRAME_T = 0.01 # time taken between each frame of fade
+
+# transparency values
+CON_AC = 1 # active window
+CON_INAC = 0.5 # inactive window
+FLOAT_AC = 1 # active floating window
+FLOAT_INAC = 0.5 # inactive floating window
+BOT_INAC = 0.9 # bottom window
+
+
+# fade durations
+FADE_TIME = 0.2
+ALT_FADE_TIME = 0.1
+
+CON_OUT = FADE_TIME # window fading out
+CON_IN = 0.15 # window fading in
+FLOAT_OUT = ALT_FADE_TIME # floating window fading out
+FLOAT_IN = ALT_FADE_TIME # floating window fading in
+BOT_OUT = ALT_FADE_TIME # bottom window fading out
+BOT_IN = ALT_FADE_TIME # bottom window fading in
+BOT_SWITCH_IN = FADE_TIME # window becoming bottom window
+BOT_SWITCH_OUT = FADE_TIME # bottom window becoming window
+FLOAT_BOT_OUT = FADE_TIME # floating window fading out from bottom
+FLOAT_BOT_IN = FADE_TIME # floating window fading in from bottom
+
+
+class Fader:
+ def __init__(self):
+ self.floating_windows = []
+ self.fader_running = False
+ self.fade_queue = []
+ self.fade_data = {}
+ self.bottom_win = None
+ self.old_win = None
+ self.active_win = None
+
+ ipc = Connection()
+ ipc.on(Event.WINDOW_FOCUS, self.on_window_focus)
+ ipc.on(Event.WINDOW_NEW, self.on_window_new)
+ ipc.on(Event.WINDOW_FLOATING, self.on_window_floating)
+
+ for win in ipc.get_tree():
+ if win.type == "floating_con":
+ self.floating_windows.append(win.id)
+ if win.focused:
+ change_opacity(win, FLOAT_AC)
+ self.active_win = win
+ else:
+ change_opacity(win, FLOAT_INAC)
+ elif win.type == "con":
+ if win.focused:
+ self.active_win = win
+ change_opacity(win, CON_AC)
+ else:
+ change_opacity(win, CON_INAC)
+
+ ipc.main()
+
+ def add_fade(self, win, start, target, duration):
+ if not duration:
+ if win.id in self.fade_queue:
+ self.fade_queue.remove(win.id)
+ del self.fade_data[win.id]
+ change_opacity(win, target)
+ return
+
+ if win.id in self.fade_queue:
+ f = self.fade_data[win.id]
+ change = (FRAME_T / duration) * (target - f["opacity"])
+ f["change"] = change
+ f["target"] = target
+ return
+
+ change_opacity(win, start)
+ change = (FRAME_T / duration) * (target - start)
+ fade_data = {"opacity": start, "change": change, "target": target, "win": win}
+ self.fade_queue.append(win.id)
+ self.fade_data[win.id] = fade_data
+
+ def start_fader(self):
+ if not self.fader_running:
+ self.fader_running = True
+ Thread(target=self.fader).start()
+
+ def fader(self):
+ while self.fade_queue:
+ for win_id in self.fade_queue.copy():
+ try:
+ f = self.fade_data[win_id]
+ except KeyError:
+ continue
+ f["opacity"] += f["change"]
+
+ finished = False
+ if f["change"] > 0:
+ if f["opacity"] >= f["target"]:
+ finished = True
+ elif f["opacity"] <= f["target"]:
+ finished = True
+
+ if finished:
+ change_opacity(f["win"], f["target"])
+ try:
+ self.fade_queue.remove(win_id)
+ del self.fade_data[win_id]
+ except (KeyError, ValueError):
+ continue
+ else:
+ change_opacity(f["win"], f["opacity"])
+
+ sleep(FRAME_T)
+ self.fader_running = False
+
+ def on_window_focus(self, ipc, e):
+ if self.active_win.id == e.container.id:
+ return
+
+ if self.active_win.type == "con":
+ if e.container.type == "con":
+ self.add_fade(
+ e.container, CON_INAC,
+ CON_AC, CON_IN)
+ self.add_fade(
+ self.active_win, CON_AC,
+ CON_INAC, CON_OUT)
+
+ else:
+ self.add_fade(
+ e.container, FLOAT_INAC,
+ FLOAT_AC, FLOAT_IN)
+ self.add_fade(
+ self.active_win, CON_AC,
+ BOT_INAC, BOT_OUT)
+ self.bottom_win = self.active_win
+
+ else:
+ if e.container.type == "con":
+ self.add_fade(
+ self.active_win, FLOAT_AC,
+ FLOAT_INAC, FLOAT_BOT_OUT)
+
+ if not self.bottom_win:
+ self.add_fade(
+ e.container, CON_INAC,
+ CON_AC, CON_IN)
+
+ elif e.container.id != self.bottom_win.id:
+ self.add_fade(
+ self.bottom_win, BOT_INAC,
+ CON_INAC, BOT_SWITCH_OUT)
+ self.add_fade(
+ e.container, CON_INAC,
+ CON_AC, BOT_SWITCH_IN)
+ self.bottom_win = e.container
+
+ else:
+ self.add_fade(
+ self.bottom_win, BOT_INAC,
+ CON_AC, BOT_IN)
+
+ else:
+ self.add_fade(
+ self.active_win, FLOAT_AC,
+ FLOAT_INAC, FLOAT_OUT)
+ self.add_fade(
+ e.container, FLOAT_INAC,
+ FLOAT_AC, FLOAT_IN)
+
+ self.start_fader()
+ self.active_win = e.container
+
+ def on_window_new(self, ipc, e):
+ if self.active_win:
+ if self.active_win.type == "con":
+ change_opacity(self.active_win, CON_INAC)
+ else:
+ change_opacity(self.active_win, FLOAT_INAC)
+
+ if self.bottom_win:
+ change_opacity(self.bottom_win, CON_INAC)
+
+ elif self.active_win and self.active_win.type == "con":
+ self.bottom_win = self.active_win
+ change_opacity(self.bottom_win, CON_INAC)
+
+ change_opacity(e.container, CON_AC)
+ self.old_win = self.active_win
+ self.active_win = e.container
+
+ def on_window_floating(self, ipc, e):
+ c_id = e.container.id
+ if c_id not in self.floating_windows:
+ self.floating_windows.append(c_id)
+
+ if self.active_win.id != e.container.id:
+ change_opacity(e.container, FLOAT_INAC)
+
+ else:
+ if self.old_win and self.bottom_win:
+ if self.old_win.type == "con":
+ self.bottom_win = self.old_win
+ change_opacity(self.bottom_win, BOT_INAC)
+ change_opacity(e.container, FLOAT_AC)
+
+ else:
+ self.floating_windows.remove(c_id)
+ if self.active_win.id != e.container.id:
+ change_opacity(e.container, CON_INAC)
+
+ else:
+ if self.old_win and self.old_win.type == "con":
+ change_opacity(self.old_win, CON_INAC)
+ change_opacity(self.active_win, CON_AC)
+
+ self.active_win = e.container
+
+
+def change_opacity(win, trans):
+ win.command("opacity " + str(trans))
+
+
+if __name__ == "__main__":
+ Fader()
+
diff --git a/scrappy/dotfiles/sway/swaylock.png b/scrappy/dotfiles/sway/swaylock.png
new file mode 100644
index 0000000..b742fc7
Binary files /dev/null and b/scrappy/dotfiles/sway/swaylock.png differ
diff --git a/scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-archlinux.png.png b/scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-archlinux.png.png
new file mode 100644
index 0000000..da227df
Binary files /dev/null and b/scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-archlinux.png.png differ
diff --git a/scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-gnu-linux.png.png b/scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-gnu-linux.png.png
new file mode 100644
index 0000000..3d31f08
Binary files /dev/null and b/scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-gnu-linux.png.png differ
diff --git a/scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-ign-0000.png.png b/scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-ign-0000.png.png
new file mode 100644
index 0000000..cd4292b
Binary files /dev/null and b/scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-ign-0000.png.png differ
diff --git a/scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-ign_astronaut.png.png b/scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-ign_astronaut.png.png
new file mode 100644
index 0000000..94d589a
Binary files /dev/null and b/scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-ign_astronaut.png.png differ
diff --git a/scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-ign_black.jpg.jpg b/scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-ign_black.jpg.jpg
new file mode 100644
index 0000000..a748f85
Binary files /dev/null and b/scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-ign_black.jpg.jpg differ
diff --git a/scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-ign_vaporWave.png.png b/scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-ign_vaporWave.png.png
new file mode 100644
index 0000000..259d092
Binary files /dev/null and b/scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-ign_vaporWave.png.png differ
diff --git a/scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-waves.jpg.jpg b/scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-waves.jpg.jpg
new file mode 100644
index 0000000..e010dc6
Binary files /dev/null and b/scrappy/dotfiles/sway/wallpapers/Macchiato-hald8-waves.jpg.jpg differ
diff --git a/scrappy/dotfiles/sway/wallpapers/nix-black-4k.png b/scrappy/dotfiles/sway/wallpapers/nix-black-4k.png
new file mode 100644
index 0000000..7b5094e
Binary files /dev/null and b/scrappy/dotfiles/sway/wallpapers/nix-black-4k.png differ
diff --git a/scrappy/dotfiles/swaylock/boot-config b/scrappy/dotfiles/swaylock/boot-config
new file mode 100644
index 0000000..cf3d644
--- /dev/null
+++ b/scrappy/dotfiles/swaylock/boot-config
@@ -0,0 +1,38 @@
+image=~/.config/swaylock/lock.png
+clock
+indicator
+ignore-empty-password
+show-failed-attempts
+
+font=Overpass Nerd Font Mono
+timestr=%I:%M %p
+datestr=%A %b %e
+
+bs-hl-color=f4dbd6
+caps-lock-bs-hl-color=f4dbd6
+caps-lock-key-hl-color=a6da95
+inside-color=00000000
+inside-clear-color=00000000
+inside-caps-lock-color=00000000
+inside-ver-color=00000000
+inside-wrong-color=00000000
+key-hl-color=67bf4a
+layout-bg-color=00000000
+layout-border-color=00000000
+layout-text-color=cad3f5
+line-color=00000000
+line-clear-color=00000000
+line-caps-lock-color=00000000
+line-ver-color=00000000
+line-wrong-color=00000000
+ring-color=b7bdf8
+ring-clear-color=f4dbd6
+ring-caps-lock-color=f5a97f
+ring-ver-color=8aadf4
+ring-wrong-color=ee99a0
+separator-color=00000000
+text-color=363a4f
+text-clear-color=f4dbd6
+text-caps-lock-color=f5a97f
+text-ver-color=8aadf4
+text-wrong-color=ee99a0
diff --git a/scrappy/dotfiles/swaylock/config b/scrappy/dotfiles/swaylock/config
new file mode 100644
index 0000000..325b7cd
--- /dev/null
+++ b/scrappy/dotfiles/swaylock/config
@@ -0,0 +1,41 @@
+screenshot
+effect-pixelate=18
+effect-vignette=0.7:0.5
+clock
+indicator-idle-visible
+ignore-empty-password
+show-failed-attempts
+
+font=Overpass Nerd Font Mono
+timestr=%I:%M %p
+datestr=%A %b %e
+fade-in=0.5
+
+bs-hl-color=f4dbd6
+caps-lock-bs-hl-color=f4dbd6
+caps-lock-key-hl-color=a6da95
+inside-color=666a8f
+inside-clear-color=00000000
+inside-caps-lock-color=00000000
+inside-ver-color=00000000
+inside-wrong-color=00000000
+key-hl-color=67bf4a
+layout-bg-color=00000000
+layout-border-color=00000000
+layout-text-color=cad3f5
+line-color=00000000
+line-clear-color=00000000
+line-caps-lock-color=00000000
+line-ver-color=00000000
+line-wrong-color=00000000
+ring-color=b7bdf8
+ring-clear-color=f4dbd6
+ring-caps-lock-color=f5a97f
+ring-ver-color=8aadf4
+ring-wrong-color=ee99a0
+separator-color=00000000
+text-color=363a4f
+text-clear-color=f4dbd6
+text-caps-lock-color=f5a97f
+text-ver-color=8aadf4
+text-wrong-color=ee99a0
diff --git a/scrappy/dotfiles/swaylock/lock.png b/scrappy/dotfiles/swaylock/lock.png
new file mode 100644
index 0000000..888a950
Binary files /dev/null and b/scrappy/dotfiles/swaylock/lock.png differ
diff --git a/scrappy/dotfiles/vis/config b/scrappy/dotfiles/vis/config
new file mode 100644
index 0000000..59b2a24
--- /dev/null
+++ b/scrappy/dotfiles/vis/config
@@ -0,0 +1,7 @@
+visualizer.fps=20
+visualizer.spectrum.bar.spacing=1
+visualizer.spectrum.bar.width=3
+visualizer.spectrum.smoothing.mode=monstercat
+
+visualizer.monstercat.smoothing.factor=3
+audio.stereo.enabled=false
diff --git a/scrappy/dotfiles/vis/vis.log b/scrappy/dotfiles/vis/vis.log
new file mode 100644
index 0000000..e69de29
diff --git a/scrappy/dotfiles/waybar/config b/scrappy/dotfiles/waybar/config
new file mode 100644
index 0000000..4db5487
--- /dev/null
+++ b/scrappy/dotfiles/waybar/config
@@ -0,0 +1,265 @@
+// Global
+{
+ "layer": "top",
+ "position": "top",
+ "margin-top": 3,
+ "margin-left": 10,
+ "margin-right": 10,
+ "margin-bottom": 3,
+
+ // If height property would be not present, it'd be calculated dynamically
+ "height": 60,
+
+ "modules-left": [
+ "custom/launcher",
+ "hyprland/workspaces"
+ // "hyprland/submap",
+ ],
+
+ "modules-center": [
+ "custom/signal",
+ "custom/steam",
+ "custom/spotify",
+ "custom/firefox",
+ "custom/slack",
+ "custom/files",
+ ],
+
+ "modules-right": [
+ "network",
+ "idle_inhibitor",
+ "memory",
+ "cpu",
+ "pulseaudio",
+ "custom/keyboard-layout",
+ "battery",
+ //"custom/PBPbattery",
+ // "backlight#icon",
+ // "backlight#value",
+ "clock",
+ "tray",
+ //"custom/weather",
+ "custom/power",
+ ],
+
+ // Modules
+
+ "idle_inhibitor": {
+ "format": "{icon} ",
+ "format-icons":{
+ "activated": "",
+ "deactivated": ""
+ }
+ },
+
+ "battery": {
+ "states": {
+ // "good": 95,
+ "warning": 30,
+ "critical": 15
+ },
+ "format": "{capacity}% {icon}",
+ "format-charging": "{capacity}% ",
+ "format-plugged": "{capacity}% ",
+ // "format-good": "", // An empty format will hide the module
+ // "format-full": "",
+ "format-icons": ["", "", "", "", ""]
+ },
+
+ "custom/PBPbattery": {
+ "exec": "~/.config/waybar/scripts/PBPbattery.sh",
+ "format": "{}",
+ },
+
+ "clock": {
+ "interval": 10,
+ "format-alt": " {:%e %b %Y}", // Icon: calendar-alt
+ "format": "{:%I:%M %p}",
+ "tooltip-format": "{:%e %B %Y}"
+ },
+
+ "cpu": {
+ "interval": 5,
+ "format": " {usage}% ({load})", // Icon: microchip
+ "states": {
+ "warning": 70,
+ "critical": 90,
+ },
+ "on-click": "foot -e 'htop'",
+ },
+
+ "custom/keyboard-layout": {
+ "exec": "swaymsg -t get_inputs | grep -m1 'xkb_active_layout_name' | cut -d '\"' -f4",
+ // Interval set only as a fallback, as the value is updated by signal
+ "interval": 30,
+ "format": " {}", // Icon: keyboard
+ // Signal sent by Sway key binding (~/.config/sway/key-bindings)
+ "signal": 1, // SIGHUP
+ "tooltip": false,
+ "on-click": "~/.config/waybar/scripts/keyboard_layout.sh",
+ },
+
+ "memory": {
+ "interval": 5,
+ "format": " {}%", // Icon: memory
+ "on-click": "foot -e 'htop'",
+ "states": {
+ "warning": 70,
+ "critical": 90
+ }
+ },
+
+ "network": {
+ "interval": 5,
+ "format-wifi": " {essid} ({signalStrength}%)", // Icon: wifi
+ "format-ethernet": " {ifname}: {ipaddr}/{cidr}", // Icon: ethernet
+ "format-disconnected": "⚠ Disconnected",
+ "tooltip-format": "{ifname}: {ipaddr}",
+ "on-click": "foot -e 'nmtui'",
+ },
+ "network#vpn": {
+ "interface": "tun0",
+ "format": " {essid} ({signalStrength}%)",
+ "format-disconnected": "⚠ Disconnected",
+ "tooltip-format": "{ifname}: {ipaddr}/{cidr}",
+ },
+
+ // "hyprland/submap": {
+ // "format": "{}",
+ // "tooltip": false
+ // },
+
+ // "sway/window": {
+ // "format": "{}",
+ // "max-length": 120
+ // },
+
+ "hyprland/workspaces": {
+ // "disable-scroll": true,
+ // "disable-markup" : false,
+ // "all-outputs": true,
+ "format": " {icon} "
+ // "format-icons": {
+ // "1": "",
+ // "2": "",
+ // "3": "",
+ // "4": "",
+ // }
+ },
+
+ "pulseaudio": {
+ "scroll-step": 1, // %, can be a float
+ "format": "{volume}% {icon}",
+ "format-bluetooth": "{volume}% {icon} {format_source}",
+ "format-bluetooth-muted": " {icon} {format_source}",
+ "format-muted": " {format_source}",
+ "format-source": "{volume}% ",
+ "format-source-muted": "",
+ "format-icons": {
+ "headphone": "",
+ "hands-free": "",
+ "headset": "",
+ "phone": "",
+ "portable": "",
+ "car": "",
+ "default": [""]
+ },
+ "on-click": "pavucontrol",
+ "on-scroll-up": "pactl set-sink-volume @DEFAULT_SINK@ +2%",
+ "on-scroll-down": "pactl set-sink-volume @DEFAULT_SINK@ -2%",
+ },
+
+ // to use the weather module replace with your city or town
+ // note: do not use spaces: new york would be newyork
+ "custom/weather": {
+ "exec": "~/.config/waybar/scripts/weather.sh ",
+ "return-type": "json",
+ "interval": 600,
+ },
+
+ // "custom/temp": {
+ // "exec": "notify-send \"temp thing\"",
+ // "interval": "once",
+ // "signal": 8,
+ // },
+
+ "tray": {
+ "icon-size": 18,
+ "spacing":10,
+ },
+
+ "backlight#icon": {
+ "format": "{icon}",
+ "format-icons": [""],
+ "on-scroll-down": "brightnessctl -c backlight set 1%-",
+ "on-scroll-up": "brightnessctl -c backlight set +1%"
+ },
+
+ "backlight#value" :{
+ "format": "{percent}%",
+ "on-scroll-down": "brightnessctl -c backlight set 1%-",
+ "on-scroll-up": "brightnessctl -c backlight set +1%"
+ },
+
+ "custom/signal": {
+ "format": " ",
+ "on-click": "exec signal",
+ "tooltip": false,
+ },
+
+ "custom/steam": {
+ "format": " ",
+ "on-click": "exec steam",
+ "tooltip": false,
+ },
+
+ "custom/spotify": {
+ "format": " ",
+ "on-click": "foot -e 'ncspot'",
+ "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 thunar",
+ "tooltip": false,
+ },
+
+
+ // "custom/pomo": {
+ // "format": " {} ",
+ // "exec": "/home/nate/source/pomozoro/zig-out/bin/pomozoro",
+ // "return-type": "json",
+ // "on-click": "echo 's' > ~/.local/share/pomozoro/pomopipe",
+ // "on-click-right": "echo 'p' > ~/.local/share/pomozoro/pomopipe",
+ // "on-click-middle": "echo 'r' > ~/.local/share/pomozoro/pomopipe",
+ // // "signal": 8,
+ // },
+
+ "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/scrappy/dotfiles/waybar/scripts/keyboard_layout.sh b/scrappy/dotfiles/waybar/scripts/keyboard_layout.sh
new file mode 100755
index 0000000..04cf5e1
--- /dev/null
+++ b/scrappy/dotfiles/waybar/scripts/keyboard_layout.sh
@@ -0,0 +1,16 @@
+#!/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/scrappy/dotfiles/waybar/scripts/power-menu.sh b/scrappy/dotfiles/waybar/scripts/power-menu.sh
new file mode 100755
index 0000000..02fb20f
--- /dev/null
+++ b/scrappy/dotfiles/waybar/scripts/power-menu.sh
@@ -0,0 +1,16 @@
+#!/usr/bin/env bash
+
+entries="Logout 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
+ logout)
+ swaymsg exit;;
+ suspend)
+ exec systemctl suspend;;
+ reboot)
+ exec systemctl reboot;;
+ shutdown)
+ exec systemctl poweroff -i;;
+esac
diff --git a/scrappy/dotfiles/waybar/style.css b/scrappy/dotfiles/waybar/style.css
new file mode 100644
index 0000000..00aa873
--- /dev/null
+++ b/scrappy/dotfiles/waybar/style.css
@@ -0,0 +1,314 @@
+/* =============================================================================
+ *
+ * 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: 0;
+ margin: 1px;
+ padding: 0;
+}
+
+/* The whole bar */
+#waybar {
+ background: transparent;
+ background-color: transparent;
+ font-family: Overpass Nerd Font;
+ font-size: 20px;
+ 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: @lavender;
+}
+
+.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;
+}
+
+/* Every modules */
+#battery,
+#clock,
+#backlight,
+#cpu,
+#custom-keyboard-layout,
+#memory,
+#mode,
+#custom-weather,
+#network,
+#pulseaudio,
+#temperature,
+#tray,
+#idle_inhibitor,
+#custom-PBPbattery {
+ padding: 0.5rem 0.6rem;
+ margin: 1px 0px;
+}
+
+/* -----------------------------------------------------------------------------
+ * Modules styles
+ * -------------------------------------------------------------------------- */
+
+#battery {
+ animation-timing-function: linear;
+ animation-iteration-count: infinite;
+ animation-direction: alternate;
+}
+
+#battery.warning {
+ color: @flamingo;
+}
+
+#battery.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;
+}
+
+#workspaces {
+ font-size: 13px;
+}
+
+#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;
+}
+
+#wiggle {
+ animation-name: blink-warning;
+}
+
+
+#workspaces button.focused {
+ border-bottom: 3px solid @green;
+ margin-bottom: 1px;
+ padding-left: 0;
+}
+
+#workspaces button.urgent {
+ border-color: @lavender;
+ color: @yellow;
+}
+
+#custom-power {
+ margin-left: 15px;
+ margin-right: 15px;
+ font-size: 15px;
+ color: @flamingo;
+}
+
+#custom-launcher {
+ font-size: 15px;
+ margin-left: 15px;
+ margin-right: 10px;
+}
+
+#backlight.icon {
+ padding-right: 1px;
+ font-size: 13px;
+}
\ No newline at end of file
diff --git a/scrappy/dotfiles/wofi/config b/scrappy/dotfiles/wofi/config
new file mode 100644
index 0000000..a7f1910
--- /dev/null
+++ b/scrappy/dotfiles/wofi/config
@@ -0,0 +1,17 @@
+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/scrappy/dotfiles/wofi/config.power b/scrappy/dotfiles/wofi/config.power
new file mode 100644
index 0000000..0ad9ecf
--- /dev/null
+++ b/scrappy/dotfiles/wofi/config.power
@@ -0,0 +1,9 @@
+hide_search=true
+hide_scroll=true
+insensitive=true
+show=dmenu
+width=100
+lines=4
+location=top_right
+x=-120
+y=10
diff --git a/scrappy/dotfiles/wofi/config.screenshot b/scrappy/dotfiles/wofi/config.screenshot
new file mode 100644
index 0000000..d18a3c8
--- /dev/null
+++ b/scrappy/dotfiles/wofi/config.screenshot
@@ -0,0 +1,9 @@
+hide_search=true
+hide_scroll=true
+insensitive=true
+width=1
+show=dmenu
+lines=5
+location=centre
+x=870
+y=455
diff --git a/scrappy/dotfiles/wofi/style.css b/scrappy/dotfiles/wofi/style.css
new file mode 100644
index 0000000..146e5a6
--- /dev/null
+++ b/scrappy/dotfiles/wofi/style.css
@@ -0,0 +1,70 @@
+/*
+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/scrappy/dotfiles/wofi/style.widgets.css b/scrappy/dotfiles/wofi/style.widgets.css
new file mode 100644
index 0000000..7718255
--- /dev/null
+++ b/scrappy/dotfiles/wofi/style.widgets.css
@@ -0,0 +1,45 @@
+/*
+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/scrappy/dotfiles/wofi/windows.py b/scrappy/dotfiles/wofi/windows.py
new file mode 100755
index 0000000..6b41a60
--- /dev/null
+++ b/scrappy/dotfiles/wofi/windows.py
@@ -0,0 +1,119 @@
+#!/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/scrappy/hardware-configuration.nix b/scrappy/hardware-configuration.nix
new file mode 100644
index 0000000..32aa3cd
--- /dev/null
+++ b/scrappy/hardware-configuration.nix
@@ -0,0 +1,52 @@
+# Do not modify this file! It was generated by ‘nixos-generate-config’
+# and may be overwritten by future invocations. Please make changes
+# to /etc/nixos/configuration.nix instead.
+{ config, lib, pkgs, modulesPath, ... }:
+
+{
+ imports =
+ [ (modulesPath + "/installer/scan/not-detected.nix")
+ ];
+
+ boot.initrd.systemd.enable = true;
+ boot.initrd.availableKernelModules = [ "xhci_pci" "usb_storage" "sd_mod" "sdhci_pci" ];
+ boot.initrd.kernelModules = [ ];
+ boot.kernelModules = [ "kvm-intel" ];
+ boot.extraModulePackages = [ ];
+ # boot.initrd.luks.devices."enc_source" = {
+ # device = "/dev/disk/by-uuid/80c9bd6b-5730-4daf-8f7e-ab13a3875921";
+ # keyFile = "/root/keyfile";
+ # crypttabExtraOpts = ["nofail"];
+ # };
+
+ fileSystems."/" =
+ { device = "/dev/disk/by-uuid/97472fe9-155a-4081-9c30-7515d261a184";
+ fsType = "ext4";
+ };
+
+ fileSystems."/boot" =
+ { device = "/dev/disk/by-uuid/CF4D-BF80";
+ fsType = "vfat";
+ options = [ "fmask=0077" "dmask=0077" ];
+ };
+
+ fileSystems."/home/scrappy/source" = {
+ device = "/dev/mapper/enc_source";
+ fsType = "ext4";
+ options = [ "nofail" ]; # Allow the boot to continue even if the mount fails
+ };
+
+ swapDevices =
+ [ { device = "/dev/disk/by-uuid/2698a2f4-fa59-4c1b-9d89-c3c802c78404"; }
+ ];
+
+ # Enables DHCP on each ethernet and wireless interface. In case of scripted networking
+ # (the default) this is the recommended approach. When using systemd-networkd it's
+ # still possible to use this option, but it's recommended to use it in conjunction
+ # with explicit per-interface declarations with `networking.interfaces..useDHCP`.
+ networking.useDHCP = lib.mkDefault true;
+ # networking.interfaces.wlp2s0.useDHCP = lib.mkDefault true;
+
+ nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
+ hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
+}
diff --git a/scrappy/modules/apps/firefox/firefox.nix b/scrappy/modules/apps/firefox/firefox.nix
new file mode 100644
index 0000000..bc6f854
--- /dev/null
+++ b/scrappy/modules/apps/firefox/firefox.nix
@@ -0,0 +1,82 @@
+{lib, config, pkgs, inputs, ...}:
+let
+ cfg = config.firefoxApp;
+in
+{
+ # imports = [
+ # inputs.nur.hmModules.nur
+ # ];
+
+ options.firefoxApp = {
+ enable = lib.mkEnableOption "enable firefox browser";
+ };
+ config = lib.mkIf cfg.enable {
+ programs.firefox = {
+ # Add pipewire support
+ # package = (pkgs.wrapFirefox (pkgs.firefox-unwrapped.override { pipewireSupport = true;}) {});
+ enable = true;
+ profiles = {
+ default = {
+ id = 0;
+ name = "default";
+ isDefault = true;
+ extensions = with pkgs; [
+ nur.repos.rycee.firefox-addons.darkreader
+ nur.repos.rycee.firefox-addons.keepassxc-browser
+ nur.repos.crazazy.firefox-addons.ublock-origin
+ nur.repos.bandithedoge.firefoxAddons.stylus
+ ];
+ search = {
+ # Replace default firefox search engine config with this one
+ force = true;
+ default = "Startpage";
+ engines = {
+ "Startpage" = {
+ urls = [{
+ template = "https://www.startpage.com/sp/search?query={searchTerms}";
+ }];
+ };
+ "Nix Packages" = {
+ urls = [{
+ template = "https://search.nixos.org/packages";
+ params = [
+ { name = "type"; value = "packages"; }
+ { name = "query"; value = "{searchTerms}"; }
+ ];
+ }];
+ icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
+ definedAliases = [ "@np" ];
+ };
+ };
+ };
+ settings = {
+ "browser.startup.blankWindow" = true;
+ "browser.startup.homepage" = "https://www.startpage.com/do/mypage.pl?prfe=11898a1adf7b7dfb587580692f358773a11ca25e993b8e077476641cec033319e15f2449c345f5be919fd0a082015c3e4ed23143bd4337512466c04c2999831a54abca2eaeb42963c63ff064";
+ "browser.search.region" = "US";
+ "browser.search.isUS" = true;
+ "distribution.searchplugins.defaultLocale" = "en-US";
+ "general.useragent.locale" = "en-US";
+ "extensions.activeThemeID" = "{831b8843-7251-4306-9521-e688f18b4aeb}";
+ "privacy.trackingprotection.enable" = true;
+ "privacy.trackingprotection.emailtracking.enable" = true;
+ "privacy.trackingprotection.socialtracking.enable" = true;
+ "privacy.clearOnShutdown.cookies" = true;
+ "browser.safebrowsing.passwords.enabled" = false;
+ "browser.migrate.interactions.passwords" = false;
+ "pref.privacy.disable_button.view_passwords" = false;
+ "signon.rememberSignon" = false;
+ "extensions.formautofill.creditCards.enabled" = false;
+ "extensions.formautofill.addresses.enabled" = false;
+ "browser.toolbars.bookmarks.visibility" = "always";
+ # For applying userContent.css - not being used
+ # "toolkit.legacyUserProfileCustomizations.stylesheets" = true;
+ # "browser.newtabpage.pinned" = [{
+ # title = "NixOS";
+ # url = "https://nixos.org";
+ # }];
+ };
+ };
+ };
+ };
+ };
+}
diff --git a/scrappy/modules/home-manager/home.nix b/scrappy/modules/home-manager/home.nix
new file mode 100644
index 0000000..48cd8c6
--- /dev/null
+++ b/scrappy/modules/home-manager/home.nix
@@ -0,0 +1,405 @@
+{ inputs, config, pkgs, ... }:
+ let
+ userName = "scrappy";
+ 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; };
+ #niri = import inputs.niri { 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 = [
+# niri.overlays.niri
+# ];
+
+ imports = [
+ ../apps/firefox/firefox.nix
+ ];
+
+ home.username = userName;
+ home.homeDirectory = "/home/${userName}";
+
+ programs.home-manager.enable = true;
+
+ home.stateVersion = "24.05"; # Please read the comment before changing.
+
+ # The home.packages option allows you to install Nix packages into your
+ # environment.
+ firefoxApp.enable = true;
+
+ fonts.fontconfig.enable = true;
+
+ wayland.windowManager.hyprland.enable = true; # enable Hyprland
+ wayland.windowManager.hyprland.settings = {
+ "$mod" = "Super";
+ "$terminal" = "foot";
+ "$fileManager" = "thunar";
+ "$menu" = "nwg-drawer";
+ # Autostart
+ exec-once =
+ [
+ "swaylock -C ~/.config/swaylock/boot-config"
+ "swaybg -i ~/.config/hypr/nix.png"
+ "nwg-panel"
+ "nm-applet --indicator"
+ # May need to kill mako if nwg-panel starts it
+ "swaync"
+ # Disable keyboard's power button
+ "hyprctl keyword 'device[power-button]:enabled' 'false'"
+ ];
+ input = {
+ repeat_rate = 50;
+ repeat_delay = 400;
+ touchpad = {
+ natural_scroll = true;
+ };
+ };
+ gestures = {
+ workspace_swipe = true;
+ };
+ general = {
+ gaps_in = 3;
+ gaps_out = 5;
+ border_size = 2;
+ "col.active_border" = "rgba(33ccffee) rgba(00ff99ee) 45deg";
+ };
+ decoration = {
+ rounding = 8;
+ inactive_opacity = 0.8;
+ # Perf improvement
+ blur = {
+ enabled = false;
+ };
+ drop_shadow = false;
+ };
+ bind =
+ [
+ "$mod, Q, killactive"
+ "$mod Shift, Q, exit"
+ "$mod, W, exec, firefox"
+ "$mod, D, exec, $menu"
+ "$mod, T, exec, $fileManager"
+ "$mod, code:36, exec, $terminal" # Enter code
+ "$mod, Space, togglefloating"
+ "$mod, F, fullscreen, 0"
+ "$mod, Tab, cyclenext"
+ "$mod Shift, Tab, swapnext"
+ "$mod, left, movefocus, l"
+ "$mod, right, movefocus, r"
+ "$mod, up, movefocus, u"
+ "$mod, down, movefocus, d"
+ "$mod Shift, left, movewindow, l"
+ "$mod Shift, right, movewindow, r"
+ "$mod Shift, up, movewindow, u"
+ "$mod Shift, down, movewindow, d"
+ # Colemak-DH binds
+ "$mod, N, movefocus, l"
+ "$mod, O, movefocus, r"
+ "$mod, E, movefocus, u"
+ "$mod, I, movefocus, d"
+ "$mod Shift, N, movewindow, l"
+ "$mod Shift, O, movewindow, r"
+ "$mod Shift, E, movewindow, u"
+ "$mod Shift, I, movewindow, d"
+ # Disabled laptop keyboard
+ "$mod SHIFT, K, exec, hyprctl keyword 'device[at-translated-set-2-keyboard]:enabled' 'false' && notify-send 'Laptop keyboard disabled' -i nix-snowflake"
+ # Reload config
+ "$mod SHIFT, R, exec, hyprctl reload && notify-send 'Hypr Config Reloaded' -i nix-snowflake"
+ # Print, exec, grimblast copy area"
+ ]
+ ++ (
+ # workspaces
+ # binds $mod + [shift +] {1..9} to [move to] workspace {1..9}
+ builtins.concatLists (builtins.genList (i:
+ let ws = i + 1;
+ in [
+ "$mod, code:1${toString i}, workspace, ${toString ws}"
+ "$mod SHIFT, code:1${toString i}, movetoworkspace, ${toString ws}"
+ ]
+ )
+ 9)
+ );
+ bindm = [
+ "$mod, mouse:272, movewindow" # LMB to move window
+ "$mod, mouse:273, resizewindow" # RMB to move window
+ ];
+ bindel = [
+ # Brightness / Volume Controls
+ # Chromebook has the printed symbols for these actions, but are really just fn keys
+ "$mod, F6, exec, brightnessctl s 10%-"
+ "$mod, F7, exec, brightnessctl s 10%+"
+ "$mod, F8, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
+ "$mod, F9, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"
+ "$mod, F10, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+"
+ # "$mod, XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"
+ ];
+ # Lid switch binds
+ bindl = [
+ ", switch:Lid Switch, exec, swaylock"
+ ];
+ misc = {
+ "vfr" = true;
+ force_default_wallpaper = 0;
+ disable_hyprland_logo = true;
+ };
+ };
+ # Optional, hint Electron apps to use Wayland:
+ # home.sessionVariables.
+ home.packages = with pkgs; [
+ ### ---
+ ### hyprland packages
+ swaybg
+ swaylock-effects
+ wofi
+ nwg-bar
+ nwg-menu
+ nwg-look
+ nwg-dock-hyprland
+ nwg-panel
+ nwg-drawer
+ nwg-launchers
+ gopsuinfo # For system stats in panel
+ wl-clipboard # System clipboard
+ networkmanagerapplet
+ libnotify
+ swaynotificationcenter
+ lynx
+ qutebrowser
+ brightnessctl
+ ### ---
+
+ # nur.repos.crazazy.js.eslint
+ # inputs.nixpkgs-stable.legacyPackages.x86_64-linux.corectrl
+ chromium
+ #
+ # Dev Tools
+ #
+ #dbeaver-bin
+ helix
+ foot
+ docker
+ docker-compose
+ fossil
+ fnc
+ jq
+ python310
+ ### LSP's
+ nil # Nix LSP
+ nodePackages_latest.bash-language-server
+ openscad-lsp
+ vscode-langservers-extracted # provides eslint, markdown, json, css, and html lsp
+ python311Packages.python-lsp-server
+ # zls
+ ### Misc
+ # android-udev-rules
+ # android-tools
+ # sdkmanager
+ usbutils
+ # cli-visualizer
+ openscad
+
+ #
+ # Gaming
+ #
+ #amdgpu_top
+ #mangohud
+ #r2modman
+ #wine-wayland
+ webcord
+
+ #
+ # Better Unix
+ #
+ bat
+ duf
+ du-dust
+ fd
+ fzf
+ lsd
+ ripgrep
+ tre-command
+ gtop
+ htop
+ neofetch
+ # Normies
+ unzip
+ llpp
+ nmap
+
+ #
+ # Photo / Video
+ #
+ imv
+ mpv
+ gimp
+ ffmpeg
+ tenacity
+ yt-dlp
+
+ #
+ # Communication
+ #
+ mumble
+ slack
+ unstable.signal-desktop
+
+ #
+ # Other
+ #
+ keepassxc
+ yubioath-flutter
+
+ #
+ # Style
+ #
+ catppuccin-kvantum
+ libsForQt5.qtstyleplugin-kvantum
+ libsForQt5.qt5ct
+ # Install fonts
+ lato
+ (nerdfonts.override { fonts = [ "Hermit" "Overpass" ]; })
+ recursive
+ ];
+
+ # Home Manager is pretty good at managing dotfiles. The primary way to manage
+ # plain files is through 'home.file'.
+ home.file."${config.xdg.configHome}" = {
+ source = ../../dotfiles;
+ recursive = true;
+ };
+
+ home.sessionVariables = {
+ BAT_THEME="Catppuccin Macchiato";
+ EDITOR = "hx";
+ # For electron apps
+ NIXOS_OZONE_WL = "1";
+ };
+
+ # Git setup
+ programs.git = {
+ enable = true;
+ userEmail = email;
+ userName = fullName;
+ extraConfig = {
+ include = { path = "${config.xdg.configHome}/macchiato.gitconfig"; };
+ init = { defaultBranch = "main"; };
+ pull = { ff = "only"; };
+ merge = { conflictStyle="zdiff3"; };
+ push = { autoSetupRemote="true"; };
+ delta = { features = "Catppuccin Macchiato"; };
+ };
+ delta.enable = true;
+ };
+
+ programs = {
+ direnv = {
+ enable = true;
+ enableZshIntegration = true; # see note on other shells below
+ nix-direnv.enable = true;
+ };
+
+ bash.enable = true; # see note on other shells below
+ };
+
+ # Zsh setup
+ programs.zsh = {
+ enable = true;
+ oh-my-zsh = {
+ enable = true;
+ plugins = [ "fossil" "git" ];
+ theme = "half-life";
+ };
+ initExtra = ''
+ eval "$(direnv hook zsh)"
+ export SSH_AUTH_SOCK=$XDG_RUNTIME_DIR/ssh-agent
+
+ yt-audio() {
+ nix-shell -p yt-dlp --run "yt-dlp -x $1 --audio-format mp3"
+ }
+
+ # Better Unix Aliases
+ # alias ask="nix-shell -p python310Packages.openai --run 'python ~/source/python/chat.py'"
+ alias ls="lsd"
+ alias l="lsd --almost-all --long"
+ alias llm="lsd --timesort --long"
+ alias lS="lsd --oneline --classic"
+ alias lt="lsd --tree --depth=2"
+ alias grep="rg"
+ alias cat="bat --paging=never"
+ alias rm="rm -i"
+ alias adaptiveoff="swaymsg 'output * adaptive_sync off'"
+ alias adaptiveon="swaymsg 'output * adaptive_sync on'"
+ '';
+ };
+
+ qt = {
+ enable = true;
+ platformTheme.name = "qtct";
+ style.name = "kvantum";
+ };
+
+ gtk = {
+ 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";
+ };
+ };
+ };
+ # 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
+ '';
+ services.wlsunset = {
+ enable = true;
+ sunrise = "07:00";
+ sunset = "17:00";
+ temperature.night = 3500;
+ };
+}
diff --git a/scrappy/modules/niri/niri_conf.nix b/scrappy/modules/niri/niri_conf.nix
new file mode 100644
index 0000000..27bb01b
--- /dev/null
+++ b/scrappy/modules/niri/niri_conf.nix
@@ -0,0 +1,183 @@
+{ 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";
+ };
+ systemPackages = lib.mkOption {
+ default = [];
+ description = "Add any additional packages desired. Merged with sway defaults.";
+ };
+
+ };
+
+ ###
+ ## Configuration
+ ###
+ config = lib.mkIf config.niriwm.enable {
+
+ #programs.dconf.enable = true;
+ #programs.sway.enable = true;
+ #programs.sway.wrapperFeatures.gtk = true;
+
+ nixpkgs.config.allowUnfree = config.niriwm.useNonFree;
+
+ ###
+ ## XDG portal setup
+ ###
+ xdg.portal = {
+ config = {
+ common = {
+ default = [
+ "wlr"
+ ];
+ };
+ };
+ extraPortals = with pkgs; [
+ # xdg-desktop-portal-kde
+ xdg-desktop-portal-gnome
+ ];
+ #wlr.enable = true;
+ enable = true;
+ };
+ xdg.sounds.enable = true;
+
+ ###
+ ## System Packages
+ ###
+ environment.systemPackages = with pkgs; lib.lists.flatten [
+ [
+ bash
+ foot
+ git
+ glib # gsettings
+ grim
+ #sway-contrib.grimshot
+ libnotify
+ mako
+ man-pages
+ man-pages-posix
+ ncspot
+ networkmanagerapplet
+ #unstable.niri
+ pavucontrol
+ slurp
+ syncthingtray
+ swaylock
+ #swayidle
+ #swaybg
+ # swww
+ #tailscale-systray
+ wl-clipboard
+ waybar
+ wdisplays
+ wofi
+ xdg-utils
+ zsh
+ lxqt.lxqt-policykit
+ # Fonts
+ ]
+ config.niriwm.systemPackages
+ ];
+ environment.variables.QT_STYLE_OVERRIDE = "kvantum";
+
+ # adds additional man pages
+ documentation.dev.enable = true;
+
+ # Thunar config
+ programs.thunar = {
+ enable = true;
+ plugins = with pkgs.xfce; [
+ thunar-archive-plugin
+ thunar-volman
+ ];
+ };
+ programs.file-roller.enable = true;
+ programs.xfconf.enable = true;
+
+ programs.zsh.enable = true;
+ #programs.steam.enable = config.swaywm.installGaming;
+ #programs.gamemode.enable = true;
+
+ #programs.adb.enable = true;
+ #programs.kdeconnect.enable = true;
+ # service file to start the sshAgent
+ #programs.ssh.startAgent = true;
+
+ ###
+ ## Services
+ ###
+ virtualisation.docker.enable = true;
+ services.blueman.enable = true;
+ #services.flatpak.enable = true;
+ services.gvfs.enable = true; # thunar mount, trash, etc
+ services.tumbler.enable = true; # thunar thumbnails
+ services.openssh.enable = true;
+ services.dbus.enable = true;
+ #services.syncthing.enable = true;
+ services.gnome.gnome-keyring.enable = true;
+ #services.usbmuxd.enable = true;
+ #services.tailscale = {
+ # enable = true;
+ # openFirewall = true;
+ #};
+ # For betaflight configurator
+ #services.udev.extraRules = ''
+ # 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"
+ #'';
+ # For yubioath desktop
+ services.pcscd.enable = true;
+ # Audio
+ security.rtkit.enable = true;
+ services.pipewire = {
+ enable = true;
+ alsa.enable = true;
+ pulse.enable = true;
+ wireplumber.enable = true;
+ };
+ sound.enable = false;
+
+ ###
+ ## Misc
+ ###
+ # Necessary for home-manager sway setup
+ security.polkit.enable = true;
+
+ #services.greetd = {
+ # enable = true;
+ # settings = rec {
+ # initial_session = {
+ # command = "${pkgs.sway}/bin/sway";
+ # user = "nate";
+ # };
+ # default_session = initial_session;
+ # };
+ #};
+
+ # services.xserver.videoDrivers = [ "amdgpu" ];
+ # Enable HIP
+ #systemd.tmpfiles.rules = [
+ # "L+ /opt/rocm/hip - - - - ${pkgs.rocmPackages.clr}"
+ #];
+ hardware.bluetooth.enable = true; # enables support for Bluetooth
+ hardware.bluetooth.powerOnBoot = true; # powers up the default Bluetooth controller on boot
+ #hardware.opengl = {
+ # Mesa
+ # enable = true;
+ # Vulkan
+ # driSupport = true;
+ # Rocm support and vulkan drivers
+ # extraPackages = with pkgs; [
+ # rocmPackages.clr.icd
+ # ];
+ #};
+ };
+}
diff --git a/scrappy/modules/sway/sway_conf.nix b/scrappy/modules/sway/sway_conf.nix
new file mode 100644
index 0000000..cddb93b
--- /dev/null
+++ b/scrappy/modules/sway/sway_conf.nix
@@ -0,0 +1,187 @@
+{ lib, config, pkgs, userName, ... }:
+{
+ options.swaywm = {
+ enable = lib.mkEnableOption "Enable sway window manager.";
+ useNonFree = lib.mkOption {
+ default = false;
+ example = true;
+ description = "Whether to enable non-free software in the sway 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 sway defaults.";
+ };
+
+ };
+
+ ###
+ ## Configuration
+ ###
+ config = lib.mkIf config.swaywm.enable {
+
+ programs.sway.enable = true;
+ programs.sway.wrapperFeatures.gtk = true;
+
+ nixpkgs.config.allowUnfree = config.swaywm.useNonFree;
+ # For R2ModMan
+ # nixpkgs.config.permittedInsecurePackages = [
+ # "electron-25.9.0"
+ # ];
+
+ ###
+ ## XDG portal setup
+ ###
+ xdg.portal = {
+ config = {
+ common = {
+ default = [
+ "wlr"
+ ];
+ };
+ };
+ extraPortals = with pkgs; [
+ # xdg-desktop-portal-kde
+ xdg-desktop-portal-gtk
+ ];
+ wlr.enable = true;
+ enable = true;
+ };
+ xdg.sounds.enable = true;
+
+ ###
+ ## System Packages
+ ###
+ environment.systemPackages = with pkgs; lib.lists.flatten [
+ [
+ bash
+ foot
+ git
+ glib # gsettings
+ grim
+ sway-contrib.grimshot
+ libnotify
+ mako
+ man-pages
+ man-pages-posix
+ ncspot
+ networkmanagerapplet
+ pavucontrol
+ slurp
+ syncthingtray
+ swaylock
+ swayidle
+ swaybg
+ # swww
+ tailscale-systray
+ wl-clipboard
+ waybar
+ wdisplays
+ wofi
+ xdg-utils
+ zsh
+ lxqt.lxqt-policykit
+ # Fonts
+ ]
+ config.swaywm.systemPackages
+ ];
+ environment.variables.QT_STYLE_OVERRIDE = "kvantum";
+
+ # adds additional man pages
+ documentation.dev.enable = true;
+
+ # Thunar config
+ programs.thunar = {
+ enable = true;
+ plugins = with pkgs.xfce; [
+ thunar-archive-plugin
+ thunar-volman
+ ];
+ };
+ programs.file-roller.enable = true;
+ programs.xfconf.enable = true;
+
+ programs.zsh.enable = true;
+ programs.steam.enable = config.swaywm.installGaming;
+ programs.gamemode.enable = true;
+
+ programs.adb.enable = true;
+ programs.kdeconnect.enable = true;
+ # service file to start the sshAgent
+ programs.ssh.startAgent = true;
+
+ ###
+ ## Services
+ ###
+ virtualisation.docker.enable = true;
+ services.blueman.enable = true;
+ services.flatpak.enable = true;
+ services.gvfs.enable = true; # thunar mount, trash, etc
+ services.tumbler.enable = true; # thunar thumbnails
+ services.openssh.enable = true;
+ services.dbus.enable = true;
+ services.syncthing.enable = true;
+ services.gnome.gnome-keyring.enable = true;
+ services.usbmuxd.enable = true;
+ services.tailscale = {
+ enable = true;
+ openFirewall = true;
+ };
+ # For betaflight configurator
+ services.udev.extraRules = ''
+ # 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"
+ '';
+ # For yubioath desktop
+ services.pcscd.enable = true;
+ # Audio
+ security.rtkit.enable = true;
+ services.pipewire = {
+ enable = true;
+ alsa.enable = true;
+ pulse.enable = true;
+ wireplumber.enable = true;
+ };
+ sound.enable = false;
+
+ ###
+ ## Misc
+ ###
+ # Necessary for home-manager sway setup
+ security.polkit.enable = true;
+
+ services.greetd = {
+ enable = true;
+ settings = rec {
+ initial_session = {
+ command = "${pkgs.sway}/bin/sway";
+ user = "nate";
+ };
+ default_session = initial_session;
+ };
+ };
+
+ # services.xserver.videoDrivers = [ "amdgpu" ];
+ # Enable HIP
+ systemd.tmpfiles.rules = [
+ "L+ /opt/rocm/hip - - - - ${pkgs.rocmPackages.clr}"
+ ];
+ hardware.bluetooth.enable = true; # enables support for Bluetooth
+ hardware.bluetooth.powerOnBoot = true; # powers up the default Bluetooth controller on boot
+ hardware.opengl = {
+ # Mesa
+ # enable = true;
+ # Vulkan
+ # driSupport = true;
+ # Rocm support and vulkan drivers
+ extraPackages = with pkgs; [
+ rocmPackages.clr.icd
+ ];
+ };
+ };
+}
diff --git a/scrappy/modules/user/main_user.nix b/scrappy/modules/user/main_user.nix
new file mode 100644
index 0000000..be730ac
--- /dev/null
+++ b/scrappy/modules/user/main_user.nix
@@ -0,0 +1,57 @@
+{ lib, config, pkgs, ... }:
+
+let
+ cfg = config.main_user;
+in
+{
+ options.main_user = {
+ enable = lib.mkEnableOption "enable user module";
+
+ isDesktopUser = lib.mkOption {
+ default = false;
+ example = true;
+ description = "Add additional user groups for desktop users";
+ };
+
+ userName = lib.mkOption {
+ default = "mainuser";
+ description = "username";
+ };
+ };
+
+ config = lib.mkIf cfg.enable {
+ users.users.${cfg.userName} = lib.mkMerge [
+ {
+ isNormalUser = true;
+ initialPassword = "password";
+
+ description = "main user";
+ shell = pkgs.zsh;
+ }
+
+ (lib.mkIf (!cfg.isDesktopUser) {
+ extraGroups = [
+ "wheel"
+ "networkmanager"
+ cfg.userName
+ ];
+ })
+ (lib.mkIf cfg.isDesktopUser {
+ extraGroups = [
+ "wheel"
+ "networkmanager"
+ "corectrl"
+ cfg.userName
+ "video"
+ "audio"
+ # For android
+ "adbusers"
+ # For serial interfaces
+ "dialout"
+ # For docker
+ "docker"
+ ];
+ })
+ ];
+ };
+}