diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
new file mode 100644
index 0000000..3b9e135
--- /dev/null
+++ b/.github/workflows/main.yml
@@ -0,0 +1,26 @@
+name: update-flake-lock
+on:
+ workflow_dispatch: # allows manual triggering
+ schedule:
+ - cron: '0 0 * * 0' # runs weekly on Sunday at 00:00
+
+jobs:
+ lockfile:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v2
+ - name: Install Nix
+ uses: cachix/install-nix-action@v16
+ with:
+ extra_nix_config: |
+ auto-optimise-store = true
+ access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
+ experimental-features = nix-command flakes
+ - name: Update flake.lock
+ uses: DeterminateSystems/update-flake-lock@v16
+ with:
+ pr-title: "chore: update flake.lock" # Title of PR to be created
+ pr-labels: | # Labels to be set on the PR
+ dependencies
+ automated
diff --git a/.gitignore b/.gitignore
new file mode 100755
index 0000000..6cbea19
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+result
+age-key.txt
+.decrypted~common.yaml
\ No newline at end of file
diff --git a/.sops.yaml b/.sops.yaml
new file mode 100644
index 0000000..993b0cc
--- /dev/null
+++ b/.sops.yaml
@@ -0,0 +1,46 @@
+keys:
+ # Users
+ - &users:
+ - &sora 4E241635F8EDD2919D2FB44CA362EA0491E2EEA0
+ # Hosts
+ - &hosts:
+ - &iriy age1ms8f0ysv6vakxepvt69fejczs6tddexepesdv4rkgtheehj3nu4sc6290s
+ - &avalon age1sxzuhh2fcd4pmaz4mdqq95t683d32ft22w9t2r7pk258u0s8wymsqdj7lg
+ - &valinor age1sxzuhh2fcd4pmaz4mdqq95t683d32ft22w9t2r7pk258u0s8wymsqdj7lg
+ - &asgard age1sxzuhh2fcd4pmaz4mdqq95t683d32ft22w9t2r7pk258u0s8wymsqdj7lg
+
+creation_rules:
+ - path_regex: secrets/iriy.ya?ml$
+ key_groups:
+ - age:
+ - *iriy
+ pgp:
+ - *sora
+ - path_regex: secrets/avalon.ya?ml$
+ key_groups:
+ - age:
+ - *avalon
+ pgp:
+ - *sora
+ - path_regex: secrets/valinor.ya?ml$
+ key_groups:
+ - age:
+ - *valinor
+ pgp:
+ - *sora
+ - path_regex: secrets/asgard.ya?ml$
+ key_groups:
+ - age:
+ - *asgard
+ pgp:
+ - *sora
+
+ - path_regex: secrets/common.ya?ml$
+ key_groups:
+ - age:
+ - *valinor
+ - *iriy
+ - *avalon
+ - *asgard
+ pgp:
+ - *sora
\ No newline at end of file
diff --git a/README.md b/README.md
index 19358b2..641d2db 100755
--- a/README.md
+++ b/README.md
@@ -1,6 +1,13 @@
-
-snowflake
+
+
+
+
+...
+
+
+
+
+
+
-:snowflake: a flake or crystal of snow :snowflake:
-
\ No newline at end of file
diff --git a/colors/default.nix b/colors/default.nix
new file mode 100644
index 0000000..d19592c
--- /dev/null
+++ b/colors/default.nix
@@ -0,0 +1,8 @@
+{
+ ...
+}:
+{
+ imports = [
+ ./sorahiro_soft.nix
+ ];
+}
diff --git a/colors/palette0.png b/colors/palette0.png
new file mode 100644
index 0000000..9ad3c67
Binary files /dev/null and b/colors/palette0.png differ
diff --git a/colors/palette1h.png b/colors/palette1h.png
new file mode 100644
index 0000000..1874f52
Binary files /dev/null and b/colors/palette1h.png differ
diff --git a/colors/palette1p.png b/colors/palette1p.png
new file mode 100644
index 0000000..86a401f
Binary files /dev/null and b/colors/palette1p.png differ
diff --git a/colors/sorahiro_hard.nix b/colors/sorahiro_hard.nix
new file mode 100644
index 0000000..e85ded6
--- /dev/null
+++ b/colors/sorahiro_hard.nix
@@ -0,0 +1,33 @@
+{
+ nix-colors,
+ ...
+}:
+{
+ # usage: a = "#${config.colorScheme.colors.base00}";
+
+ colorScheme = {
+ slug = "sorahiro-hard";
+ name = "sorahiro-hard";
+ author = "Soraefir @ Helcel";
+ colors = {
+ # Format: Name, Pantone, RAL
+ base00= "#030B12"; # Rich Black / 6C / 000-15-00
+ base01= "#0C1D2E"; # Maastricht Blue / 5395C / 270-20-15
+ base02= "#203A53"; # Japanese Indigo / 534C / 260-20-20
+ base03= "#425F7C"; # Deep Space Sparkle / 7699C / 260-40-20
+ base04= "#93A9BE"; # Pewter Blue / 535C / 260-70-15
+ base05= "#B6C5D5"; # Pastel Blue / 5445C / 260-80-10
+ base06= "#D6DFE8"; # Gainsboro / 642C / 260-90-05
+ base07= "#F0F3F7"; # White / 656C / 290-92-05
+ base08= "#F59331"; # Deep Saffron / 715C / 070-70-70
+ base09= "#F5F531"; # Maximum Yellow / 394C / 100-80-80
+ base0A= "#93F531"; # French Lime / 7488C / 120-70-75
+ base0B= "#31F593"; # Eucalyptus / 3385C / 160-70-50
+ base0C= "#3193F5"; # Brilliant Azure / 2727C / 280-50-40
+ baseOD= "#9331F5"; # Blue-Violet / 7442C / 300-40-45
+ base0E= "#F53193"; # Royal Pink / 232C / 350-50-50
+ base0F= "#F53131"; # Deep Carmine Pink / 1788C / 040-50-70
+
+ };
+ };
+}
\ No newline at end of file
diff --git a/colors/sorahiro_soft.nix b/colors/sorahiro_soft.nix
new file mode 100644
index 0000000..dcf7e1f
--- /dev/null
+++ b/colors/sorahiro_soft.nix
@@ -0,0 +1,32 @@
+{
+ nix-colors,
+ ...
+}:
+{
+ # usage: a = "#${config.colorScheme.colors.base00}";
+
+ colorScheme = {
+ slug = "sorahiro-soft";
+ name = "sorahiro-soft";
+ author = "Soraefir @ Helcel";
+ colors = {
+ # Format: Name, Pantone, RAL
+ base00= "#030B12"; # Rich Black / 6C / 000-15-00
+ base01= "#0C1D2E"; # Maastricht Blue / 5395C / 270-20-15
+ base02= "#203A53"; # Japanese Indigo / 534C / 260-20-20
+ base03= "#425F7C"; # Deep Space Sparkle / 7699C / 260-40-20
+ base04= "#93A9BE"; # Pewter Blue / 535C / 260-70-15
+ base05= "#B6C5D5"; # Pastel Blue / 5445C / 260-80-10
+ base06= "#D6DFE8"; # Gainsboro / 642C / 260-90-05
+ base07= "#F0F3F7"; # White / 656C / 290-92-05
+ base08= "#F5B97D"; # Mellow Apricot / 156C / 070-80-40
+ base09= "#F5F57D"; # Sunny / 393C / 100-90-50
+ base0A= "#B9F57D"; # Yellow-Green / 373C / 120-80-60
+ base0B= "#7DF5B9"; # Aquamarine / 3375C / 150-80-40
+ base0C= "#7DB9F5"; # Light Azure / 278C / 250-70-30
+ base0D= "#B97DF5"; # Lavender / 2572C / 310-60-35
+ base0E= "#F57DB9"; # Persian Pink / 211C / 350-60-45
+ base0F= "#F57D7D"; # Light Coral / 170C / 030-60-50
+ };
+ };
+}
diff --git a/flake.lock b/flake.lock
new file mode 100644
index 0000000..4b9aa0a
--- /dev/null
+++ b/flake.lock
@@ -0,0 +1,307 @@
+{
+ "nodes": {
+ "base16-schemes": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1680729003,
+ "narHash": "sha256-M9LHTL24/W4oqgbYRkz0B2qpNrkefTs98pfj3MxIXnU=",
+ "owner": "tinted-theming",
+ "repo": "base16-schemes",
+ "rev": "dc048afa066287a719ddbab62b3e19e4b5110cf0",
+ "type": "github"
+ },
+ "original": {
+ "owner": "tinted-theming",
+ "repo": "base16-schemes",
+ "type": "github"
+ }
+ },
+ "darwin": {
+ "inputs": {
+ "nixpkgs": [
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1684343812,
+ "narHash": "sha256-ZTEjiC8PDKeP8JRchuwcFXUNlMcyQ4U+DpyVZ3pB6Q4=",
+ "owner": "lnl7",
+ "repo": "nix-darwin",
+ "rev": "dfbdabbb3e797334172094d4f6c0ffca8c791281",
+ "type": "github"
+ },
+ "original": {
+ "owner": "lnl7",
+ "ref": "master",
+ "repo": "nix-darwin",
+ "type": "github"
+ }
+ },
+ "hardware": {
+ "locked": {
+ "lastModified": 1684169666,
+ "narHash": "sha256-N5jrykeSxLVgvm3Dd3hZ38/XwM/jU+dltqlXgrGlYxk=",
+ "owner": "nixos",
+ "repo": "nixos-hardware",
+ "rev": "71ce85372a614d418d5e303dd5702a79d1545c04",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nixos",
+ "repo": "nixos-hardware",
+ "type": "github"
+ }
+ },
+ "home-manager": {
+ "inputs": {
+ "nixpkgs": [
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1684596126,
+ "narHash": "sha256-4RZZmygeEXpuBqEXGs38ZAcWjWKGwu13Iqbxub6wuJk=",
+ "owner": "nix-community",
+ "repo": "home-manager",
+ "rev": "27ef11f0218d9018ebb2948d40133df2b1de622d",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-community",
+ "repo": "home-manager",
+ "type": "github"
+ }
+ },
+ "hyprland": {
+ "inputs": {
+ "hyprland-protocols": "hyprland-protocols",
+ "nixpkgs": "nixpkgs",
+ "wlroots": "wlroots",
+ "xdph": "xdph"
+ },
+ "locked": {
+ "lastModified": 1684332077,
+ "narHash": "sha256-briamwodIZsYolceEjX41mqw/VkKiHuIEprw0u5wioY=",
+ "owner": "hyprwm",
+ "repo": "Hyprland",
+ "rev": "79b8576df9630ea1c0fb1c6e399a424c3dcdcd47",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "Hyprland",
+ "type": "github"
+ }
+ },
+ "hyprland-protocols": {
+ "inputs": {
+ "nixpkgs": [
+ "hyprland",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1681065697,
+ "narHash": "sha256-QPzwwlGKX95tl6ZEshboZbEwwAXww6lNLdVYd6T9Mrc=",
+ "owner": "hyprwm",
+ "repo": "hyprland-protocols",
+ "rev": "4d29e48433270a2af06b8bc711ca1fe5109746cd",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "hyprland-protocols",
+ "type": "github"
+ }
+ },
+ "nix-colors": {
+ "inputs": {
+ "base16-schemes": "base16-schemes",
+ "nixpkgs-lib": "nixpkgs-lib"
+ },
+ "locked": {
+ "lastModified": 1682108218,
+ "narHash": "sha256-tMr7BbxualFQlN+XopS8rMMgf2XR9ZfRuwIZtjsWmfI=",
+ "owner": "misterio77",
+ "repo": "nix-colors",
+ "rev": "b92df8f5eb1fa20d8e09810c03c9dc0d94ef2820",
+ "type": "github"
+ },
+ "original": {
+ "owner": "misterio77",
+ "repo": "nix-colors",
+ "type": "github"
+ }
+ },
+ "nixpkgs": {
+ "locked": {
+ "lastModified": 1683014792,
+ "narHash": "sha256-6Va9iVtmmsw4raBc3QKvQT2KT/NGRWlvUlJj46zN8B8=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "1a411f23ba299db155a5b45d5e145b85a7aafc42",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs-lib": {
+ "locked": {
+ "lastModified": 1680397293,
+ "narHash": "sha256-wBpJ73+tJ8fZSWb4tzNbAVahC4HSo2QG3nICDy4ExBQ=",
+ "owner": "nix-community",
+ "repo": "nixpkgs.lib",
+ "rev": "b18d328214ca3c627d3cc3f51fd9d1397fdbcd7a",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-community",
+ "repo": "nixpkgs.lib",
+ "type": "github"
+ }
+ },
+ "nixpkgs-stable": {
+ "locked": {
+ "lastModified": 1684025543,
+ "narHash": "sha256-hGe7S+i5je+8E/b2mOXVI9nmr038Dw+bV8e1P8xHSe0=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "c6d2f3dc0d3efd4285eebe4f8a36a47ba438138e",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "release-22.11",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_2": {
+ "locked": {
+ "lastModified": 1684570954,
+ "narHash": "sha256-FX5y4Sm87RWwfu9PI71XFvuRpZLowh00FQpIJ1WfXqE=",
+ "owner": "nixos",
+ "repo": "nixpkgs",
+ "rev": "3005f20ce0aaa58169cdee57c8aa12e5f1b6e1b3",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nixos",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_3": {
+ "locked": {
+ "lastModified": 1683777345,
+ "narHash": "sha256-V2p/A4RpEGqEZussOnHYMU6XglxBJGCODdzoyvcwig8=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "635a306fc8ede2e34cb3dd0d6d0a5d49362150ed",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixpkgs-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nur": {
+ "locked": {
+ "lastModified": 1684596696,
+ "narHash": "sha256-xkiqdXR2ekQx7kvFBMXXY0gV4AIMm+ihtCf6CKOA5cM=",
+ "owner": "nix-community",
+ "repo": "nur",
+ "rev": "d1635a9543afe0e213e4cbc37154487cab884b84",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-community",
+ "repo": "nur",
+ "type": "github"
+ }
+ },
+ "root": {
+ "inputs": {
+ "darwin": "darwin",
+ "hardware": "hardware",
+ "home-manager": "home-manager",
+ "hyprland": "hyprland",
+ "nix-colors": "nix-colors",
+ "nixpkgs": "nixpkgs_2",
+ "nur": "nur",
+ "sops-nix": "sops-nix"
+ }
+ },
+ "sops-nix": {
+ "inputs": {
+ "nixpkgs": "nixpkgs_3",
+ "nixpkgs-stable": "nixpkgs-stable"
+ },
+ "locked": {
+ "lastModified": 1684571352,
+ "narHash": "sha256-342PCrDSZ70qVX5hwz1M0cYNBdEcIBVzxyjrU/Um3RU=",
+ "owner": "Mic92",
+ "repo": "sops-nix",
+ "rev": "df8b52249e78a0ac33680c9e0b7a029ec22cd8f5",
+ "type": "github"
+ },
+ "original": {
+ "owner": "Mic92",
+ "repo": "sops-nix",
+ "type": "github"
+ }
+ },
+ "wlroots": {
+ "flake": false,
+ "locked": {
+ "host": "gitlab.freedesktop.org",
+ "lastModified": 1682436395,
+ "narHash": "sha256-GGEjkQO9m7YLYIXIXM76HWdhjg4Ye+oafOtyaFAYKI4=",
+ "owner": "wlroots",
+ "repo": "wlroots",
+ "rev": "6830bfc17fd94709e2cdd4da0af989f102a26e59",
+ "type": "gitlab"
+ },
+ "original": {
+ "host": "gitlab.freedesktop.org",
+ "owner": "wlroots",
+ "repo": "wlroots",
+ "type": "gitlab"
+ }
+ },
+ "xdph": {
+ "inputs": {
+ "hyprland-protocols": [
+ "hyprland",
+ "hyprland-protocols"
+ ],
+ "nixpkgs": [
+ "hyprland",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1682439384,
+ "narHash": "sha256-zHDa8LCZs05TZHQSIZ3ucwyMPglBGHcqTBzfkLjYXTM=",
+ "owner": "hyprwm",
+ "repo": "xdg-desktop-portal-hyprland",
+ "rev": "c0e233955568fbea4e859336f6d3d14d51294d7c",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hyprwm",
+ "repo": "xdg-desktop-portal-hyprland",
+ "type": "github"
+ }
+ }
+ },
+ "root": "root",
+ "version": 7
+}
diff --git a/flake.nix b/flake.nix
new file mode 100755
index 0000000..7d4a229
--- /dev/null
+++ b/flake.nix
@@ -0,0 +1,97 @@
+{
+ description = "SoraFlake";
+
+ inputs = {
+ nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
+ hardware.url = "github:nixos/nixos-hardware";
+ nur.url = "github:nix-community/nur";
+
+ home-manager = {
+ url = "github:nix-community/home-manager";
+ inputs.nixpkgs.follows = "nixpkgs";
+ };
+ darwin = {
+ url = "github:lnl7/nix-darwin/master"; # MacOS Package Management
+ inputs.nixpkgs.follows = "nixpkgs";
+ };
+
+ hyprland.url = "github:hyprwm/Hyprland";
+ sops-nix.url = "github:Mic92/sops-nix";
+ nix-colors.url = "github:misterio77/nix-colors";
+
+ };
+
+ outputs = { self, nixpkgs, hardware, nur, home-manager, darwin, sops-nix, hyprland, nix-colors, ... }@inputs:
+
+ let
+ # pkgs = import nixpkgs {
+ # inherit system;
+ # config.allowUnfree = true;
+ # };
+ gen = import ./generator.nix { inherit inputs nixpkgs home-manager darwin sops-nix hyprland nix-colors; };
+ in {
+ nixosConfigurations = {
+ valinor = gen.generate {
+ type = "nixos";
+ system = "x86_64-linux";
+ host = "valinor";
+ };
+ iriy = gen.generate {
+ type = "nixos";
+ system = "x86_64-linux";
+ host = "iriy";
+ };
+ efir = gen.generate {
+ type = "nixos";
+ system = "x86_64-linux";
+ host = "efir";
+ };
+ avalon = gen.generate {
+ type = "nixos";
+ system = "x86_64-linux";
+ host = "avalon";
+ };
+
+ };
+ darwinConfigurations = {
+ asgard = gen.generate {
+ type = "macos";
+ system = "x86-64-darwin";
+ host = "asgard";
+ };
+ };
+ homeConfigurations = {
+ yomi = gen.generate {
+ type = "home";
+ system = "arm-64";
+ host = "example";
+ };
+ example = gen.generate {
+ type = "home";
+ system = "x86_64-linux"; #supports any
+ host = "example";
+ };
+ };
+ # ===== Unsupported/NotImplemented ======
+ # menel - PI/ARM64
+ # ilduma - PI/ARM64
+ # daimoth - PI/ARM64
+ # gimle - ....
+
+ # ===== Unused ======
+ #
+ # naraka - ?
+ # diyu - ?
+ # tirnanog - ?
+ # valhalla - ?
+ # arcadia - ?
+ # elysium - ?
+ # empyrean - ?
+ # duat - ?
+ # sheol - ?
+ # adlivun - ?
+ # araf - ?
+ # aman/araman - ?
+
+ };
+}
diff --git a/generator.nix b/generator.nix
new file mode 100644
index 0000000..fcb255d
--- /dev/null
+++ b/generator.nix
@@ -0,0 +1,54 @@
+{ inputs, nixpkgs, home-manager, darwin, sops-nix, hyprland, nix-colors, ... }:
+
+{
+ generate = { type, system, host }:
+ ({"nixos" = nixpkgs.lib.nixosSystem {
+ system = system;
+ modules = [
+ sops-nix.nixosModules.sops
+ ./hosts/${host}
+ home-manager.nixosModules.home-manager {
+ home-manager.useGlobalPkgs = true;
+ home-manager.useUserPackages = true;
+ home-manager.extraSpecialArgs = {
+ inherit inputs;
+ };
+ home-manager.users.sora = {
+ imports = [
+ nix-colors.homeManagerModule
+ hyprland.homeManagerModules.default
+ ./hosts/${host}/home.nix
+ ];
+ };
+ }
+ ];
+ };
+ "macos" = darwin.lib.darwinSystem {
+ system = system;
+ modules = [
+ sops-nix.nixosModules.sops
+ ./hosts/${host}
+ home-manager.darwinModules.home-manager {
+ home-manager.useGlobalPkgs = true;
+ home-manager.useUserPackages = true;
+ home-manager.extraSpecialArgs = {
+ inherit inputs;
+ };
+ home-manager.users.sora = {
+ imports = [
+ nix-colors.homeManagerModule
+ hyprland.homeManagerModules.default
+ ./hosts/${host}/home.nix
+ ];
+ };
+ }
+ ];
+ };
+ "home" = home-manager.lib.homeManagerConfiguration {
+ modules = [
+ ./hosts/${host}/home.nix
+ ];
+ };
+ _ = throw "Unsupported system";
+ }.${type});
+}
\ No newline at end of file
diff --git a/home/cli/default.nix b/home/cli/default.nix
new file mode 100644
index 0000000..20f485e
--- /dev/null
+++ b/home/cli/default.nix
@@ -0,0 +1,20 @@
+{
+ pkgs,
+ ...
+}: {
+ imports = [
+ ./git
+ ./neofetch
+ ./starship
+ ./zsh
+ ];
+
+ home.packages = with pkgs; [
+ sudo
+ ripgrep
+
+ bat
+ croc
+ socat
+ ];
+}
\ No newline at end of file
diff --git a/home/cli/git/default.nix b/home/cli/git/default.nix
new file mode 100644
index 0000000..1c6b100
--- /dev/null
+++ b/home/cli/git/default.nix
@@ -0,0 +1,20 @@
+{
+ pkgs,
+ ...
+}: {
+
+ programs.git = {
+ enable = true;
+ userEmail = "soraefir+git@pm.me";
+ userName = "soraefir";
+ signing = {
+ key = "BD47506D475EE86D";
+ signByDefault = true;
+ };
+ ignores = ["*result*" ".direnv" "node_modules"];
+ };
+
+ home.packages = with pkgs; [
+ tig
+ ];
+}
\ No newline at end of file
diff --git a/home/cli/neofetch/config.conf b/home/cli/neofetch/config.conf
new file mode 100644
index 0000000..b656175
--- /dev/null
+++ b/home/cli/neofetch/config.conf
@@ -0,0 +1,127 @@
+
+print_info() {
+ info ""
+ info "${c5} ├─ Distro " distro
+ info "${c5} ├─ Kernel " kernel
+ info "${c5} ├─ Pkgs " packages
+ info "${c5} ├─ Compositor " de
+ info "${c5} ├─ CPU " cpu
+ info "${c5} ├─ GPU " gpu
+ info "${c5} ├─ Term " term
+ prin "$(color 0) $(color 1) $(color 2) $(color 3) $(color 4) $(color 5) $(color 6) $(color 7)"
+ prin "$(color 8) $(color 9) $(color 10) $(color 11) $(color 12) $(color 13) $(color 14) $(color 15)"
+
+}
+
+##--------- Title
+title_fqdn="off"
+
+##--------- Kernel
+kernel_shorthand="off"
+
+##--------- Distro
+distro_shorthand="on"
+os_arch="off"
+
+##--------- Uptime
+uptime_shorthand="off"
+
+##--------- Memory
+memory_percent="off"
+memory_unit="mib"
+
+##--------- Packages
+package_managers="on"
+
+##--------- Shell
+shell_path="off"
+shell_version="on"
+
+##--------- CPU
+speed_type="bios_limit"
+speed_shorthand="off"
+cpu_brand="on"
+cpu_speed="off"
+cpu_cores="off"
+cpu_temp="off"
+
+##--------- GPU
+gpu_brand="on"
+gpu_type="dedicated"
+
+##--------- Resolution
+refresh_rate="off"
+
+##--------- GTK
+gtk_shorthand="off"
+gtk2="on"
+gtk3="on"
+
+##--------- IP
+public_ip_host="http://ident.me"
+public_ip_timeout=2
+
+##--------- DE
+de_version="on"
+
+##--------- Disk
+disk_show=('/')
+disk_subtitle="mount"
+disk_percent="on"
+
+##--------- Song
+music_player="auto"
+song_format="%artist% - %album% - %title%"
+song_shorthand="off"
+mpc_args=()
+
+##--------- Text Colors
+colors=(0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)
+
+##--------- Text Options
+bold="on"
+underline_enabled="on"
+underline_char=""
+separator=":"
+
+##--------- Color Blocks
+block_range=(0 15)
+color_blocks="on"
+block_width=3
+block_height=1
+col_offset="auto"
+
+##--------- Progress Bars
+bar_char_elapsed="-"
+bar_char_total="="
+bar_border="on"
+bar_length=15
+bar_color_elapsed="distro"
+bar_color_total="distro"
+
+cpu_display="off"
+memory_display="off"
+battery_display="off"
+disk_display="off"
+
+##--------- Backend Settings
+image_backend="kitty"
+image_source="auto"
+
+##--------- Ascii Options
+ascii_distro="nixos_small"
+ascii_bold="on"
+
+##--------- Image Options
+image_loop="off"
+thumbnail_dir="${XDG_CACHE_HOME:-${HOME}/.cache}/thumbnails/neofetch"
+crop_mode="normal"
+crop_offset="center"
+image_size="auto"
+gap=2
+yoffset=0
+xoffset=0
+background_color=
+
+##--------- Misc Options
+stdout="off"
diff --git a/home/cli/neofetch/default.nix b/home/cli/neofetch/default.nix
new file mode 100644
index 0000000..f2672bb
--- /dev/null
+++ b/home/cli/neofetch/default.nix
@@ -0,0 +1,10 @@
+{
+ pkgs,
+ config,
+ ...
+}: {
+ home.packages = with pkgs; [
+ neofetch
+ ];
+ xdg.configFile."neofetch/config.conf".source =./config.conf;
+}
diff --git a/home/cli/starship/default.nix b/home/cli/starship/default.nix
new file mode 100644
index 0000000..ea57806
--- /dev/null
+++ b/home/cli/starship/default.nix
@@ -0,0 +1,63 @@
+{
+ config,
+ lib,
+ ...
+}: {
+
+ home.sessionVariables.STARSHIP_CACHE = "${config.xdg.cacheHome}/starship";
+
+ programs.starship = {
+ enable = true;
+ enableFishIntegration = false;
+ enableIonIntegration = false;
+ enableNushellIntegration = false;
+ enableZshIntegration = true;
+ settings = {
+ format = lib.concatStrings [
+ "[░▒▓](#${config.colorScheme.colors.base06})"
+ "$username"
+ "$hostname"
+ "[](bg:#${config.colorScheme.colors.base05} fg:#${config.colorScheme.colors.base06})"
+ "$directory"
+ "[](bg:#${config.colorScheme.colors.base04} fg:#${config.colorScheme.colors.base05})"
+ "$git_branch"
+ "$git_status"
+ "[](fg:#${config.colorScheme.colors.base04})"
+ ];
+ username = {
+ show_always = true;
+ style_user = "bg:#${config.colorScheme.colors.base06} fg:#${config.colorScheme.colors.base00}";
+ style_root = "bg:#${config.colorScheme.colors.base06} fg:#${config.colorScheme.colors.base00}";
+ format = "[ $user]($style)";
+ };
+ hostname = {
+ ssh_symbol = "";
+ style = "bg:#${config.colorScheme.colors.base06} fg:#${config.colorScheme.colors.base00}";
+ format = "[@$hostname]($style)";
+ ssh_only = false;
+ disabled = false;
+ };
+ directory = {
+ style = "bg:#${config.colorScheme.colors.base05} fg:#${config.colorScheme.colors.base00}";
+ format = "[ $path ]($style)";
+ truncation_length = 3;
+ truncation_symbol = "…/";
+ };
+ directory.substitutions = {
+ "Documents" = " ";
+ "Downloads" = " ";
+ "Music" = " ";
+ "Pictures" = " ";
+ };
+ git_branch = {
+ symbol = "";
+ style = "bg:#${config.colorScheme.colors.base04} fg:#${config.colorScheme.colors.base00}";
+ format = "[ $symbol $branch ]($style)";
+ };
+ git_status = {
+ style = "bg:#${config.colorScheme.colors.base04} fg:#${config.colorScheme.colors.base00}";
+ format = "[$all_status$ahead_behind ]($style)";
+ };
+ };
+ };
+}
\ No newline at end of file
diff --git a/home/cli/zsh/default.nix b/home/cli/zsh/default.nix
new file mode 100644
index 0000000..d657f6c
--- /dev/null
+++ b/home/cli/zsh/default.nix
@@ -0,0 +1,5 @@
+{
+ ...
+}: {
+ programs.zsh.enable = true;
+}
diff --git a/home/gui/default.nix b/home/gui/default.nix
new file mode 100644
index 0000000..372aefb
--- /dev/null
+++ b/home/gui/default.nix
@@ -0,0 +1,51 @@
+{
+ pkgs,
+ lib,
+ inputs,
+ ...
+}: {
+ imports = [
+ ./dunst
+ ./eww
+ ./wofi
+ ./mpv
+ ./wayland
+
+ ./theme
+
+ ./firefox
+ ./zathura
+ ./kitty
+
+ ./various
+ ];
+
+ home.packages = with pkgs; [
+ light
+ dunst
+ libnotify
+ wofi
+ swayidle
+ swaylock-effects
+ swww
+ ];
+
+ xdg.mimeApps = {
+ enable = true;
+ defaultApplications = {
+ "x-scheme-handler/discord-409416265891971072" = ["discord-409416265891971072.desktop"];
+ "x-scheme-handler/discord-402572971681644545" = ["discord-402572971681644545.desktop"];
+ "x-scheme-handler/discord-696343075731144724" = ["discord-696343075731144724.desktop"];
+ "x-scheme-handler/http" = ["firefox.desktop"];
+ "x-scheme-handler/https" = ["firefox.desktop"];
+ "x-scheme-handler/chrome" = ["firefox.desktop"];
+ "text/html" = ["firefox.desktop"];
+ "application/x-extension-htm" = ["firefox.desktop"];
+ "application/x-extension-html" = ["firefox.desktop"];
+ "application/x-extension-shtml" = ["firefox.desktop"];
+ "application/xhtml+xml" = ["firefox.desktop"];
+ "application/x-extension-xhtml" = ["firefox.desktop"];
+ "application/x-extension-xht" = ["firefox.desktop"];
+ };
+ };
+}
\ No newline at end of file
diff --git a/home/gui/dunst/default.nix b/home/gui/dunst/default.nix
new file mode 100644
index 0000000..b6bcc8b
--- /dev/null
+++ b/home/gui/dunst/default.nix
@@ -0,0 +1,94 @@
+{
+ config,
+ ...
+}:
+{
+
+ services.dunst = {
+ enable = true;
+ #waylandDisplay = "DP-2";
+ settings = {
+ global = {
+ follow = "mouse";
+ height = "200";
+ width = "400";
+ scale = "0";
+ origin = "top-right";
+ offset = "4x40";
+ notification_limit = "0";
+ progress_bar = "true";
+ progress_bar_height = "10";
+ progress_bar_frame_width = "0";
+ progress_bar_min_width = "350";
+ progress_bar_max_width = "400";
+ indicate_hidden = "yes";
+ transparency = "0";
+ separator_height = "2";
+ padding = "12";
+ horizontal_padding = "15";
+ text_icon_padding = "0";
+ frame_width = "2";
+ frame_color = "#${config.colorScheme.colors.base03}";
+ separator_color = "auto";
+ sort = "yes";
+ font = "IBM Plex Mono 14";
+ markup = "full";
+ format = "%s\\n%b";
+ alignment = "center";
+ vertical_alignment = "center";
+ show_age_threshold = "60";
+ ellipsize = "end";
+ ignore_newline = "no";
+ stack_duplicates = "true";
+ hide_duplicate_count = "false";
+ show_indicators = "yes";
+ min_icon_size = 32;
+ max_icon_size = 64;
+
+ icon_path = "/usr/share/icons/gnome/128x128/status/:/usr/share/icons/gnome/128x128/devices/";
+ icon_theme = "Papirus, Adwaita";
+ enable_recursive_icon_lookup = "true";
+
+ sticky_history = "yes";
+ history_length = "20";
+
+ dmenu = "wofi --show dmenu -p dunst:";
+ browser = "/usr/bin/xdg-open";
+ always_run_script = "true";
+ title = "Dunst";
+ class = "Dunst";
+ corner_radius = "10";
+ ignore_dbusclose = "false";
+ layer = "top";
+ force_xwayland = "true";
+ force_xinerama = "false";
+
+ mouse_left_click = "close_current";
+ mouse_middle_click = "context";
+ mouse_right_click = "do_action";
+
+ };
+ urgency_low = {
+ background = "#${config.colorScheme.colors.base00}";
+ foreground = "#${config.colorScheme.colors.base07}";
+ frame_color = "#${config.colorScheme.colors.base03}";
+ timeout = "3";
+ highlight = "#${config.colorScheme.colors.base0B}";
+ };
+ urgency_normal = {
+ background = "#${config.colorScheme.colors.base00}";
+ foreground = "#${config.colorScheme.colors.base07}";
+ frame_color = "#${config.colorScheme.colors.base03}";
+ timeout = "5";
+ highlight = "#${config.colorScheme.colors.base0C}";
+ };
+ urgency_critical ={
+ background = "#${config.colorScheme.colors.base00}";
+ foreground = "#${config.colorScheme.colors.base0F}";
+ frame_color = "#${config.colorScheme.colors.base03}";
+ timeout = "10";
+ highlight = "#${config.colorScheme.colors.base0E}";
+ };
+ };
+ };
+}
\ No newline at end of file
diff --git a/home/gui/eww/css/_calendar.scss b/home/gui/eww/css/_calendar.scss
new file mode 100644
index 0000000..5256b99
--- /dev/null
+++ b/home/gui/eww/css/_calendar.scss
@@ -0,0 +1,31 @@
+.calendar-win {
+ @include window;
+ background-color: $bg;
+ color: $fg;
+ padding: .2em;
+}
+
+calendar {
+ padding: 5px;
+
+ :selected {
+ color: $base0C;
+ }
+
+ .header {
+ color: $base05;
+ }
+
+ .highlight {
+ color: $base0C;
+ font-weight: bold;
+ }
+
+ .button {
+ color: $base0C;
+ }
+
+ :indeterminate {
+ color: $base03;
+ }
+}
diff --git a/home/gui/eww/css/_sidebar.scss b/home/gui/eww/css/_sidebar.scss
new file mode 100644
index 0000000..edf8131
--- /dev/null
+++ b/home/gui/eww/css/_sidebar.scss
@@ -0,0 +1,123 @@
+.system-menu-box {
+ @include window;
+ background-color: $bg;
+ color: $fg;
+}
+
+.separator {
+ font-size: 1rem;
+}
+
+.top-row {
+ margin: 1rem 1.5rem 0;
+
+ .time { font-size: 2rem; }
+
+ .date-box {
+ margin: 0 1rem;
+
+ label { font-size: 1.1rem; }
+
+ .date {
+ background: unset;
+ margin: 0 .5rem 0 0;
+ padding: 0;
+ }
+ }
+
+ button {
+ background-color: $bg1;
+ border-radius: 16px;
+ margin-bottom: .1rem;
+ padding: 0 .5rem;
+
+ label { font-size: 1.5rem; }
+ &:hover { background-color: $bg1; }
+ }
+}
+
+.system-row {
+ margin: .5rem .7rem;
+
+ label {
+ font-size: 1rem;
+ margin: 0 .1rem;
+ }
+}
+
+.element {
+ @include rounding;
+ background-color: $bg1;
+ margin: .3rem;
+
+ button {
+ @include rounding;
+ padding: 1rem 3rem;
+
+ label {
+ font-size: 1.5rem;
+ }
+
+ &:hover {
+ background-color: rgba(255, 255, 255, 0.2);
+ }
+ }
+}
+
+.sliders {
+ @include rounding;
+ background-color: $bg1;
+ margin: .5rem 1rem;
+ padding: .6rem 1rem;
+
+ scale {
+ margin-right: -1rem;
+ min-width: 21.5rem;
+
+ trough { margin-right: 0; }
+ }
+
+ box { margin: .2rem 0; }
+ label { font-size: 1.2rem; }
+}
+
+.volume-slider-box,
+.brightness-slider-box {
+ trough { background-color: $base02; }
+}
+
+.volume-bar highlight {
+ @include rounding;
+ background-image: linear-gradient(to right, $base0B, $base0C);
+}
+
+.brightness-slider-box scale highlight {
+ @include rounding;
+ background-image: linear-gradient(to right, $base0A, $base0B);
+}
+
+.bottom-row {
+ margin: .5rem 1rem;
+
+ .battery-icon { font-size: 2rem; }
+ .battery-wattage { color: $base0A; }
+
+ .battery-status {
+ color: $base04;
+ margin: 0 .5rem;
+ }
+}
+
+.bt-connected {
+ background-color: $base0C;
+ color: $base00;
+
+ button:hover { background-color: rgba(0, 0, 0, .2); }
+}
+
+.net-connected {
+ background-color: $base0C;
+ color: $base00;
+
+ button:hover { background-color: rgba(0, 0, 0, .2); }
+}
diff --git a/home/gui/eww/css/_system.scss b/home/gui/eww/css/_system.scss
new file mode 100644
index 0000000..1d0ae20
--- /dev/null
+++ b/home/gui/eww/css/_system.scss
@@ -0,0 +1,76 @@
+.membar {
+ color: $base08;
+}
+
+.cpubar {
+ color: $base0C;
+}
+
+.batbar {
+ color: $base0B;
+}
+
+.membar,
+.cpubar,
+.batbar {
+ background-color: $bg1;
+}
+
+.iconmem {
+ color: $base08;
+}
+
+.iconcpu {
+ color: $base0C;
+}
+
+.icon-text {
+ font-size: 3rem;
+ padding: .7rem;
+}
+
+.sys-text-sub {
+ color: $fg;
+}
+
+.sys-text-mem,
+.sys-text-cpu {
+ font-size: 1rem;
+ font-weight: bold;
+}
+
+.sys-icon-mem,
+.sys-icon-cpu {
+ font-size: 1.5rem;
+ margin: 1.5rem;
+}
+
+.system-info-box {
+ @include rounding;
+ background-color: $bg1;
+ margin: .5rem 1rem;
+ padding: .5rem;
+}
+
+.sys-mem,
+.sys-cpu {
+ background-color: $bg;
+}
+
+.sys-icon-mem,
+.sys-text-mem,
+.sys-mem {
+ color: $base08;
+}
+
+.sys-icon-cpu,
+.sys-text-cpu,
+.sys-cpu {
+ color: $base0C;
+}
+
+.sys-box {
+ margin: .3em;
+
+ box { margin-left: 1rem; }
+}
diff --git a/home/gui/eww/css/_volume.scss b/home/gui/eww/css/_volume.scss
new file mode 100644
index 0000000..dc13793
--- /dev/null
+++ b/home/gui/eww/css/_volume.scss
@@ -0,0 +1,5 @@
+.vol-icon { color: $base0B; }
+.volbar highlight {
+ background-image: linear-gradient(to right, $base0B, $base0C);
+ border-radius: 10px;
+}
diff --git a/home/gui/eww/default.nix b/home/gui/eww/default.nix
new file mode 100644
index 0000000..25b0d67
--- /dev/null
+++ b/home/gui/eww/default.nix
@@ -0,0 +1,51 @@
+{
+ config,
+ pkgs,
+ lib,
+ ...
+}:
+{
+
+ home.packages = [
+ pkgs.eww-wayland
+ pkgs.jaq
+ ];
+
+ xdg.configFile."eww" = {
+ source = lib.cleanSourceWith {
+ filter = name: _type: let
+ baseName = baseNameOf (toString name);
+ in
+ !(lib.hasSuffix ".nix" baseName) && (baseName != "_colors.scss");
+ src = lib.cleanSource ./.;
+ };
+
+ recursive = true;
+ };
+
+ # colors file
+ xdg.configFile."eww/css/_colors.scss".text = ''
+$base00: #${config.colorScheme.colors.base00};
+$base01: #${config.colorScheme.colors.base01};
+$base02: #${config.colorScheme.colors.base02};
+$base03: #${config.colorScheme.colors.base03};
+$base04: #${config.colorScheme.colors.base04};
+$base05: #${config.colorScheme.colors.base05};
+$base06: #${config.colorScheme.colors.base06};
+$base07: #${config.colorScheme.colors.base07};
+$base08: #${config.colorScheme.colors.base08};
+$base09: #${config.colorScheme.colors.base09};
+$base0A: #${config.colorScheme.colors.base0A};
+$base0B: #${config.colorScheme.colors.base0B};
+$base0C: #${config.colorScheme.colors.base0C};
+$base0D: #${config.colorScheme.colors.base0D};
+$base0E: #${config.colorScheme.colors.base0E};
+$base0F: #${config.colorScheme.colors.base0F};
+
+
+$fg: $base07;
+$bg: $base00;
+$bg1: $base01;
+$border: $base03;
+'';
+}
\ No newline at end of file
diff --git a/home/gui/eww/eww.scss b/home/gui/eww/eww.scss
new file mode 100644
index 0000000..7db2f46
--- /dev/null
+++ b/home/gui/eww/eww.scss
@@ -0,0 +1,110 @@
+@import 'css/colors';
+
+@mixin rounding {
+ border-radius: 16px;
+}
+
+@mixin window {
+ border: 2px solid $base03;
+ margin: 5px 5px 10px;
+ @include rounding;
+}
+
+* {
+ all: unset;
+ font-family: "IBM Plex Mono";
+ transition: 200ms ease;
+}
+
+@import 'css/calendar';
+@import 'css/sidebar';
+@import 'css/system';
+@import 'css/volume';
+
+.bar {
+ background-color: $bg;
+ color: $fg;
+ border-bottom: 2px solid $base03;
+
+ label {
+ font-size: 1.2rem;
+ }
+}
+
+tooltip {
+ background: $bg;
+ border: 1px solid $border;
+ border-radius: 8px;
+
+ label {
+ font-size: 1rem;
+ }
+}
+
+.icon,
+.icon label { font-family: Material Design Icons; }
+
+.ws {
+ border-radius: 2rem;
+ margin: .7rem .25rem;
+}
+
+.focused {
+ background-color: $bg;
+ border-radius: 1rem;
+ margin: .3rem;
+ padding: .25rem;
+}
+
+.module { margin: 0 5px; }
+
+.hour {
+ font-weight: bold;
+ padding-left: 5px;
+}
+
+.minute {
+ padding-right: .7rem;
+}
+
+.date {
+ background: $bg;
+ color: $base0C;
+
+ label {
+ font-size: 1.2rem;
+ }
+}
+
+.bright-icon { color: $base09; }
+.module-bt { font-size: 1.2rem; }
+
+scale trough {
+ background-color: $bg1;
+ border-radius: 24px;
+ margin: 0 1rem;
+ min-height: 10px;
+ min-width: 70px;
+}
+
+.workspaces { margin-left: 10px; }
+
+.grey {
+ background-color: $base02;
+}
+
+.red {
+ background-color: $base0F;
+}
+
+.orange {
+ background-color: $base08;
+}
+
+.green {
+ background-color: $base0B;
+}
+
+.blue {
+ background-color: $base0C;
+}
\ No newline at end of file
diff --git a/home/gui/eww/eww.yuck b/home/gui/eww/eww.yuck
new file mode 100644
index 0000000..9599c8a
--- /dev/null
+++ b/home/gui/eww/eww.yuck
@@ -0,0 +1,44 @@
+(include "./modules/clock.yuck")
+(include "./modules/net.yuck")
+(include "./modules/sys.yuck")
+(include "./modules/variables.yuck")
+(include "./modules/workspaces.yuck")
+
+(include "./windows/calendar.yuck")
+(include "./windows/system.yuck")
+
+(defwidget left []
+ (box
+ :space-evenly false
+ :halign "start"
+ (workspaces)))
+
+(defwidget right []
+ (box
+ :space-evenly false
+ :halign "end"
+ (sys)
+ (clock_module)))
+
+(defwidget center []
+ (box
+ :space-evenly false
+ :halign "center"
+ ))
+
+(defwidget bar-box []
+ (centerbox
+ (left)
+ (center)
+ (right)))
+
+(defwindow bar
+ :monitor 0
+ :geometry (geometry :x "0%"
+ :y "0%"
+ :width "100%"
+ :height "32px"
+ :anchor "top center")
+ :stacking "fg"
+ :exclusive true
+ (bar-box))
\ No newline at end of file
diff --git a/home/gui/eww/modules/bright.yuck b/home/gui/eww/modules/bright.yuck
new file mode 100644
index 0000000..27b1b5f
--- /dev/null
+++ b/home/gui/eww/modules/bright.yuck
@@ -0,0 +1,9 @@
+(defwidget bright []
+ (box
+ :class "module"
+ (eventbox
+ :onscroll "echo {} | sed -e 's/up/-U 1/g' -e 's/down/-A 1/g' | xargs light"
+ (label
+ :text {brightness.icon}
+ :class "bright-icon icon"
+ :tooltip "brightness ${round(brightness.percent, 0)}%"))))
diff --git a/home/gui/eww/modules/clock.yuck b/home/gui/eww/modules/clock.yuck
new file mode 100644
index 0000000..4b13d9e
--- /dev/null
+++ b/home/gui/eww/modules/clock.yuck
@@ -0,0 +1,24 @@
+(defvar date_rev false)
+
+(defwidget clock_module []
+ (eventbox
+ :onhover "${EWW_CMD} update date_rev=true"
+ :onhoverlost "${EWW_CMD} update date_rev=false"
+ (overlay
+ :class "module"
+ (box
+ :space-evenly false
+ (label
+ :text {time.hour}
+ :class "hour")
+ (label
+ :text ":")
+ (label
+ :text {time.minute}
+ :class "minute"))
+ (revealer
+ :reveal date_rev
+ (button
+ :class "date"
+ :onclick "${EWW_CMD} open --toggle calendar"
+ {time.date})))))
diff --git a/home/gui/eww/modules/net.yuck b/home/gui/eww/modules/net.yuck
new file mode 100644
index 0000000..8f92313
--- /dev/null
+++ b/home/gui/eww/modules/net.yuck
@@ -0,0 +1,7 @@
+(defwidget net []
+ (button
+ :class "module icon"
+ :onclick "gnome-control-center &"
+ :tooltip {net.name}
+ :style "color: ${net.color};"
+ {net.icon}))
diff --git a/home/gui/eww/modules/sys.yuck b/home/gui/eww/modules/sys.yuck
new file mode 100644
index 0000000..569c8d3
--- /dev/null
+++ b/home/gui/eww/modules/sys.yuck
@@ -0,0 +1,30 @@
+(defwidget sys []
+ (box
+ :class "module"
+ :space-evenly false
+ :spacing 5
+ (circular-progress
+ :value {EWW_CPU.avg}
+ :class "cpubar"
+ :thickness 3
+ (button
+ :onclick "${EWW_CMD} open --toggle system-menu"
+ (label :class "icon-text" :text "")))
+
+ (circular-progress
+ :value {memory.percent}
+ :class "membar"
+ :thickness 3
+ (button
+ :onclick "${EWW_CMD} open --toggle system-menu"
+ (label :class "icon-text" :text "")))
+
+ (circular-progress
+ :value {battery.percentage}
+ :class "batbar"
+ :style "color: ${battery.color};"
+ :thickness 3
+ (button
+ :tooltip "${battery.percentage}%"
+ :onclick "${EWW_CMD} open --toggle system-menu"
+ (label :class "icon-text" :text "")))))
diff --git a/home/gui/eww/modules/variables.yuck b/home/gui/eww/modules/variables.yuck
new file mode 100644
index 0000000..3ba4a51
--- /dev/null
+++ b/home/gui/eww/modules/variables.yuck
@@ -0,0 +1,17 @@
+(defvar bright_reveal false)
+(defvar bt_rev false)
+(defvar net_rev false)
+(defvar time_rev false)
+(defvar vol_reveal false)
+
+(defpoll time :interval "5s" `date +'{"date": "%d/%m", "hour": "%H", "minute": "%M", "day": "%A"}'`)
+
+(deflisten flightmode "scripts/flightmode")
+(deflisten powermode "scripts/powermode")
+(deflisten battery "scripts/battery")
+(deflisten bluetooth "scripts/bluetooth")
+(deflisten brightness "scripts/brightness")
+(deflisten memory "scripts/memory")
+(deflisten net "scripts/net")
+(deflisten volume "scripts/volume")
+(deflisten workspace "scripts/workspaces")
diff --git a/home/gui/eww/modules/volume.yuck b/home/gui/eww/modules/volume.yuck
new file mode 100644
index 0000000..c4dceee
--- /dev/null
+++ b/home/gui/eww/modules/volume.yuck
@@ -0,0 +1,11 @@
+(defwidget volume-module []
+ (box
+ :class "module icon"
+ (eventbox
+ :onscroll "echo {} | sed -e 's/up/-/g' -e 's/down/+/g' | xargs -I% wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.005%"
+ :onclick "pavucontrol &"
+ :onrightclick "scripts/volume mute SINK"
+ (label
+ :class "vol-icon"
+ :tooltip "volume ${volume.percent}%"
+ :text {volume.icon}))))
diff --git a/home/gui/eww/modules/workspaces.yuck b/home/gui/eww/modules/workspaces.yuck
new file mode 100644
index 0000000..f8464c4
--- /dev/null
+++ b/home/gui/eww/modules/workspaces.yuck
@@ -0,0 +1,13 @@
+(defwidget workspaces []
+ (eventbox
+ :onscroll "echo {} | sed -e \"s/up/-1/g\" -e \"s/down/+1/g\" | xargs hyprctl dispatch workspace"
+ (box
+ :class "module workspaces"
+ (for ws in workspace
+ (button
+ :onclick "hyprctl dispatch workspace ${ws.number}"
+ :class "ws icon ${ws.color}"
+ ; :tooltip {ws.tooltip}
+ (box
+ :class `${ws.focused ? "focused" : ""}`
+ :height 3))))))
diff --git a/home/gui/eww/scripts/battery b/home/gui/eww/scripts/battery
new file mode 100755
index 0000000..4a4c305
--- /dev/null
+++ b/home/gui/eww/scripts/battery
@@ -0,0 +1,61 @@
+#!/usr/bin/env bash
+
+icons=("" "" "" "" "" "" "" "" "" "" "")
+num_icons=$(awk -v n="${#icons[@]}" 'BEGIN{print 100 / n}')
+BATTERY="/sys/class/power_supply/BAT0"
+
+geticon() {
+ level=$(awk -v n="$CAPACITY" -v c="$num_icons" 'BEGIN{print int(n/c-1)}')
+ echo "${icons[$level]}"
+}
+
+status() {
+ if [ "$STATE" = "Charging" ]; then
+ echo -n "charging"
+
+ if [ "$RATE" -gt 0 ]; then
+ echo ", $(gettime) left"
+ else
+ echo ""
+ fi
+ elif [ "$STATE" = "Discharging" ]; then
+ echo "$(gettime)h left"
+ else
+ echo "fully charged"
+ fi
+}
+
+color() {
+ [ "$CAPACITY" -le 20 ] && echo '#f38ba8' || echo '#a6e3a1'
+}
+
+wattage() {
+ awk -v rate="$RATE" -v uw="1000000" 'BEGIN{print sprintf("%.1f W", rate/uw)}'
+}
+
+gettime() {
+ FULL=$(cat $BATTERY/energy_full)
+ NOW=$(cat $BATTERY/energy_now)
+
+ if [ "$RATE" -gt 0 ]; then
+ if [ "$STATE" = "Discharging" ]; then
+ EX="$NOW / $RATE"
+ else
+ EX="($FULL - $NOW) / $RATE"
+ fi
+ date -u -d@"$(awk -v ex="$EX" 'BEGIN{print ex * 3600}')" +%H:%M
+ fi
+}
+
+if [ -d "$BATTERY" ]; then
+ while true; do
+ RATE=$(cat $BATTERY/power_now)
+ CAPACITY=$(cat $BATTERY/capacity)
+ STATE=$(cat $BATTERY/status)
+
+ echo '{ "icon": "'"$(geticon)"'", "percentage": '"$CAPACITY"', "wattage": "'"$(wattage)"'", "status": "'"$(status)"'", "color": "'"$(color)"'" }'
+ sleep 5
+ done
+else
+ echo '{ "icon": "", "percentage": "0", "wattage": "", "status": "", "color": "#a6e3a1" }'
+fi
diff --git a/home/gui/eww/scripts/brightness b/home/gui/eww/scripts/brightness
new file mode 100755
index 0000000..a4728d2
--- /dev/null
+++ b/home/gui/eww/scripts/brightness
@@ -0,0 +1,29 @@
+#!/usr/bin/env bash
+
+function get_time_ms {
+ date -u +%s%3N
+}
+
+icons=("" "" "")
+
+gen_output() {
+ icon="${icons[$(awk -v n="$(light)" 'BEGIN{print int(n/34)}')]}"
+ echo '{"percent": "'$(light)'", "icon": "'$icon'"}'
+}
+
+if [[ $(light 2>/dev/stdout 1>/dev/null | head -n1 | awk '{print $1}') == "No" ]]; then
+ echo '{"percent": 100.0, "icon": ""}'
+elif [ "$1" = "" ]; then
+ # initial
+ last_time=$(get_time_ms)
+ gen_output
+
+ udevadm monitor | rg --line-buffered "backlight" | while read -r _; do
+ current_time=$(get_time_ms)
+ delta=$((current_time - last_time))
+ if [[ $delta -gt 50 ]]; then
+ gen_output
+ last_time=$(get_time_ms)
+ fi
+ done
+fi
\ No newline at end of file
diff --git a/home/gui/eww/scripts/flightmode b/home/gui/eww/scripts/flightmode
new file mode 100755
index 0000000..59e18c5
--- /dev/null
+++ b/home/gui/eww/scripts/flightmode
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+icon() {
+ [ "$STATUS" = "no" ] && echo "" || echo ""
+}
+
+toggle() {
+ if [ "$STATUS" = "no" ]; then
+ rfkill block all
+ else
+ rfkill unblock all
+ fi
+}
+
+if [ "$1" = "toggle" ]; then
+ toggle
+else
+ icon
+ rfkill event | while read -r _; do
+ STATUS="$(rfkill list | sed -n 2p | awk '{print $3}')"
+ icon
+ done
+fi
\ No newline at end of file
diff --git a/home/gui/eww/scripts/memory b/home/gui/eww/scripts/memory
new file mode 100755
index 0000000..89085b3
--- /dev/null
+++ b/home/gui/eww/scripts/memory
@@ -0,0 +1,14 @@
+#!/usr/bin/env bash
+
+total="$(free --si | rg Mem | awk '{print $2}')"
+
+human() {
+ awk -v mem="$1" 'BEGIN{print sprintf("%.1f%s", mem/1000/(mem > 1000000 ? 1000 : 1), mem > 1000000 ? "G" : "M")}'
+}
+
+free --si -s 3 | rg --line-buffered Mem | while read -r line; do
+ used=$(echo "$line" | awk '{print $3}')
+ perc=$(awk -v used="$used" -v total="$total" 'BEGIN{print sprintf("%.f", used/total*100)}')
+
+ echo '{"total": "'$(human "$total")'", "used": "'$(human "$used")'", "percent": '$perc'}'
+done
\ No newline at end of file
diff --git a/home/gui/eww/scripts/net b/home/gui/eww/scripts/net
new file mode 100755
index 0000000..a41f844
--- /dev/null
+++ b/home/gui/eww/scripts/net
@@ -0,0 +1,72 @@
+#!/usr/bin/env bash
+
+function get_time_ms {
+ date -u +%s%3N
+}
+
+icons=("" "" "" "" "")
+
+function toggle() {
+ status=$(rfkill | grep wlan | awk '{print $4}')
+
+ if [ "$status" = "unblocked" ]; then
+ rfkill block wlan
+ else
+ rfkill unblock wlan
+ fi
+}
+
+function gen_wifi() {
+ signal=$(cat /proc/net/wireless | head -n3 | tail -n1 | awk '{print $3}')
+ level=$(awk -v n="$signal" 'BEGIN{print int((n-1)/20)}')
+ if [ "$level" -gt 4 ]; then
+ level=4
+ fi
+
+ icon=${icons[$level]}
+ color="#cba6f7"
+ class="net-connected"
+ name=$(wpa_cli status | grep \^ssid= | sed 's/ssid=//g')
+}
+
+function gen_ethernet() {
+ icon=""
+ class="net-connected"
+ color="#cba6f7"
+ name=Wired
+}
+
+function make_content() {
+ local ethernet wifi
+ ethernet=$(ip link | rg "^[0-9]+: en[po]+" | head -n1 | sed 's/[a-zA-Z0-9_,><:\ -]*state //g' | sed 's/ mode [a-zA-Z0-9 ]*//g')
+ wifi=$(wpa_cli status | rg "^wpa_state=" | sed 's/wpa_state=//g')
+
+ # test ethernet first
+ if [[ $ethernet == "UP" ]]; then
+ gen_ethernet
+ elif [[ $wifi == "COMPLETED" ]]; then
+ gen_wifi
+ else
+ icon=""
+ color="#988ba2"
+ class="net-disconnected"
+ name="Disconnected"
+ fi
+
+ echo '{"icon": "'$icon'", "name": "'$name'", "color": "'$color'", "class": "'$class'"}'
+}
+
+if [ "$1" = "toggle" ]; then
+ toggle
+else
+ last_time=$(get_time_ms)
+ make_content
+ ip monitor | while read -r _; do
+ current_time=$(get_time_ms)
+ delta=$((current_time - last_time))
+ if [[ $delta -gt 50 ]]; then
+ make_content
+ last_time=$(get_time_ms)
+ fi
+ done
+fi
diff --git a/home/gui/eww/scripts/powermode b/home/gui/eww/scripts/powermode
new file mode 100755
index 0000000..31710ef
--- /dev/null
+++ b/home/gui/eww/scripts/powermode
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+icon() {
+ [ "$STATUS" = "no" ] && echo "" || echo ""
+}
+
+toggle() {
+ if [ "$STATUS" = "no" ]; then
+ echo ""
+ else
+ echo ""
+ fi
+}
+
+if [ "$1" = "toggle" ]; then
+ toggle
+ icon
+else
+ icon
+fi
\ No newline at end of file
diff --git a/home/gui/eww/scripts/volume b/home/gui/eww/scripts/volume
new file mode 100755
index 0000000..150645e
--- /dev/null
+++ b/home/gui/eww/scripts/volume
@@ -0,0 +1,73 @@
+#!/usr/bin/env bash
+
+function get_time_ms {
+ date -u +%s%3N
+}
+
+volicons=("" "" "")
+
+vol() {
+ wpctl get-volume @DEFAULT_AUDIO_"$1"@ | awk '{print int($2*100)}'
+}
+ismuted() {
+ wpctl get-volume @DEFAULT_AUDIO_"$1"@ | rg -qi muted
+ echo -n $?
+}
+setvol() {
+ wpctl set-volume @DEFAULT_AUDIO_"$1"@ "$(awk -v n="$2" 'BEGIN{print (n / 100)}')"
+}
+setmute() {
+ wpctl set-mute @DEFAULT_AUDIO_"$1"@ toggle
+}
+
+gen_output() {
+ percent="$(vol "SINK")"
+ lvl=$(awk -v n="$percent" 'BEGIN{print int(n/34)}')
+ ismuted=$(ismuted "SINK")
+
+ if [ "$ismuted" = 1 ]; then
+ icon="${volicons[$lvl]}"
+ else
+ icon=""
+ fi
+
+ echo '{"icon": "'$icon'", "percent": "'$(vol "SINK")'", "microphone": "'$(vol "SOURCE")'"}'
+}
+
+case "$1" in
+"mute")
+ if [ "$2" != "SOURCE" ] && [ "$2" != "SINK" ]; then
+ echo "Can only mute SINK or SOURCE"
+ exit 1
+ fi
+ setmute "$2"
+ ;;
+
+"setvol")
+ if [ "$2" != "SOURCE" ] && [ "$2" != "SINK" ]; then
+ echo "Can only set volume for SINK or SOURCE"
+ exit 1
+ elif [ "$3" -lt 0 ] || [ "$3" -gt 100 ]; then
+ echo "Volume must be between 0 and 100"
+ exit 1
+ fi
+ setvol "$2" "$3"
+ ;;
+
+"")
+
+ last_time=$(get_time_ms)
+ gen_output
+
+ pw-cli -m | rg --line-buffered "PipeWire:Interface:Client" | while read -r event; do
+ current_time=$(get_time_ms)
+ delta=$((current_time - last_time))
+ if [[ $delta -gt 50 ]]; then
+ gen_output
+ last_time=$(get_time_ms)
+ fi
+ done
+ ;;
+
+*) echo "wrong usage" ;;
+esac
\ No newline at end of file
diff --git a/home/gui/eww/scripts/workspaces b/home/gui/eww/scripts/workspaces
new file mode 100755
index 0000000..8db57c1
--- /dev/null
+++ b/home/gui/eww/scripts/workspaces
@@ -0,0 +1,86 @@
+#!/usr/bin/env bash
+
+colors=("blue" "orange" "green" "red")
+empty="grey"
+
+# get initial focused workspace
+focusedws=$(hyprctl -j monitors | jaq -r '.[] | select(.focused == true) | .activeWorkspace.id')
+
+declare -A o=([1]=0 [2]=0 [3]=0 [4]=0 [5]=0 [6]=0 [7]=0 [8]=0 [9]=0 [10]=0)
+declare -A monitormap
+declare -A workspaces
+
+# set color for each workspace
+status() {
+ if [ "${o[$1]}" -eq 1 ]; then
+ mon=${monitormap[${workspaces[$1]}]}
+ echo -n "${colors[$mon]}"
+ else
+ echo -n "$empty"
+ fi
+}
+
+# handle workspace create/destroy
+workspace_event() {
+ while read -r k v; do workspaces[$k]="$v"; done < <(hyprctl -j workspaces | jaq -jr '.[] | .id, " ", .monitor, "\n"')
+}
+# handle monitor (dis)connects
+monitor_event() {
+ while read -r k v; do monitormap["$k"]=$v; done < <(hyprctl -j monitors | jaq -jr '.[] | .name, " ", .id, "\n"')
+}
+
+# get all apps titles in a workspace
+applist() {
+ ws="$1"
+
+ apps=$(hyprctl -j clients | jaq -jr '.[] | select(.workspace.id == '"$ws"') | .title + "\\n"')
+ echo -En "${apps%"\n"}"
+}
+
+# generate the json for eww
+generate() {
+ echo -n '['
+
+ for i in {1..10}; do
+ echo -n ''"$([ "$i" -eq 1 ] || echo ,)" '{"number": "'"$i"'", "color": "'"$(status "$i")"'", "focused": '"$([ "$focusedws" = "$i" ] && echo "true" || echo "false")"'}' #, "tooltip": "'$(applist "$i")'" }'
+ done
+
+ echo ']'
+}
+
+# setup
+
+# add monitors
+monitor_event
+
+# add workspaces
+workspace_event
+
+# check occupied workspaces
+for num in "${!workspaces[@]}"; do
+ o[$num]=1
+done
+# generate initial widget
+generate
+
+# main loop
+socat -u UNIX-CONNECT:/tmp/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | rg --line-buffered "workspace|mon(itor)?" | while read -r line; do
+ case ${line%>>*} in
+ "workspace")
+ focusedws=${line#*>>}
+ ;;
+ "focusedmon")
+ focusedws=${line#*,}
+ ;;
+ "createworkspace")
+ o[${line#*>>}]=1
+ ;;
+ "destroyworkspace")
+ o[${line#*>>}]=0
+ ;;
+ "monitor"*)
+ monitor_event
+ ;;
+ esac
+ generate
+done
\ No newline at end of file
diff --git a/home/gui/eww/windows/calendar.yuck b/home/gui/eww/windows/calendar.yuck
new file mode 100644
index 0000000..ad407d8
--- /dev/null
+++ b/home/gui/eww/windows/calendar.yuck
@@ -0,0 +1,14 @@
+(defwidget calendar-win []
+ (box
+ :class "calendar-win"
+ (calendar)))
+
+(defwindow calendar
+ :monitor 0
+ :geometry (geometry
+ :x "0%"
+ :y "0%"
+ :anchor "top right"
+ :width "0px"
+ :height "0px")
+ (calendar-win))
\ No newline at end of file
diff --git a/home/gui/eww/windows/system.yuck b/home/gui/eww/windows/system.yuck
new file mode 100644
index 0000000..2726faa
--- /dev/null
+++ b/home/gui/eww/windows/system.yuck
@@ -0,0 +1,190 @@
+(defwidget system-menu []
+ (box
+ :class "system-menu-box"
+ :space-evenly false
+ :orientation "v"
+ (centerbox
+ :class "top-row"
+ :space-evenly false
+ (box
+ (label
+ :class "time"
+ :text "${time.hour}:${time.minute}")
+ (box
+ :class "date-box"
+ :space-evenly false
+ (label
+ :class "date"
+ :text {time.date}
+ )
+ (label
+ :class "day"
+ :text {time.day}
+ )
+ )
+ )
+ (label)
+ (box
+ :space-evenly false
+ :halign "end"
+ (button
+ :halign "end"
+ :class "power-button icon"
+ :onclick "wlogout -p layer-shell -c 10 -m 500 &"
+ ""
+ )
+ )
+ )
+
+ (centerbox
+ :class "system-row"
+ (box
+ :class "net-box"
+ :space-evenly false
+ :orientation "v"
+ (box
+ :class "element icon ${net.class}"
+ (button
+ :class "net-button"
+ :onclick "scripts/net toggle"
+ {net.icon}
+ )
+ )
+ (label
+ :text {net.name}
+ :xalign 0.5
+ :limit-width 15
+ )
+ )
+
+ (box
+ :class "flightmode-box"
+ :space-evenly false
+ :orientation "v"
+ (box
+ :class "element"
+ (button
+ :class "flightmode-button"
+ :onclick "scripts/flightmode toggle"
+ flightmode
+ )
+ )
+ (label
+ :text "Flight Mode"
+ :xalign 0.5
+ :limit-width 16
+ )
+ )
+
+ (box
+ :class "powermode-box"
+ :space-evenly false
+ :orientation "v"
+ (box
+ :class "element"
+ (button
+ :class "powermode-button"
+ :onclick "scripts/powermode toggle"
+ powermode))
+ (label
+ :text "Power Mode"
+ :xalign 0.5
+ :limit-width 16)))
+
+ (box
+ :class "sliders"
+ :orientation "v"
+ (box
+ :class "volume-slider-box"
+ :space-evenly false
+ (button
+ :class "volume-icon icon"
+ :onclick "scripts/volume mute SINK"
+ {volume.icon})
+ (scale
+ :class "volume-bar"
+ :value {volume.percent}
+ :onchange "scripts/volume setvol SINK {}"))
+ (box
+ :class "brightness-slider-box"
+ :space-evenly false
+ (button
+ :class "brightness-slider-icon icon"
+ {brightness.icon})
+ (scale
+ :class "brightness-slider"
+ :value {brightness.percent}
+ :marks true
+ :onchange "light -S {}")))
+
+ (box
+ :class "system-info-box"
+
+ ; cpu
+ (box
+ :class "sys-box"
+ :space-evenly false
+ :halign "start"
+ (circular-progress
+ :value "${EWW_CPU.avg}"
+ :class "sys-cpu"
+ :thickness 3
+ (label
+ :text ""
+ :class "sys-icon-cpu icon"))
+ (box
+ :orientation "v"
+ :vexpand false
+ (label
+ :text "CPU"
+ :halign "start"
+ :class "sys-text-cpu")
+ (label
+ :text "${round(EWW_CPU.avg,2)}%"
+ :halign "start"
+ :class "sys-text-sub")
+ (label
+ :text "${EWW_CPU.cores[0].freq} MHz"
+ :halign "start"
+ :class "sys-text-sub")))
+
+ ; memory
+ (box
+ :class "sys-box"
+ :space-evenly false
+ :halign "end"
+ (circular-progress
+ :value {memory.percent}
+ :class "sys-mem"
+ :thickness 3
+ (label
+ :text ""
+ :class "sys-icon-mem icon"))
+ (box
+ :orientation "v"
+ (label
+ :text "RAM"
+ :halign "start"
+ :class "sys-text-mem")
+ (label
+ :text "${memory.used} | ${memory.total}"
+ :halign "start"
+ :class "sys-text-sub"
+ )
+ )
+ )
+ )
+ (label)
+ )
+)
+
+(defwindow system-menu
+ :stacking "fg"
+ :monitor 0
+ :geometry (geometry
+ :x "0"
+ :y "0"
+ :width "0%"
+ :height "0%"
+ :anchor "right top")
+ (system-menu))
\ No newline at end of file
diff --git a/home/gui/firefox/default.nix b/home/gui/firefox/default.nix
new file mode 100644
index 0000000..baec7a6
--- /dev/null
+++ b/home/gui/firefox/default.nix
@@ -0,0 +1,23 @@
+{
+ config,
+ ...
+}: {
+ programs.firefox = {
+ enable = true;
+ profiles = {
+ main = {
+ id = 0;
+ settings = {
+ "browser.uidensity" = 1;
+ "privacy.trackingprotection.enabled" = true;
+ "privacy.trackingprotection.socialtracking.enabled" = true;
+ "privacy.trackingprotection.socialtracking.annotate.enabled" = true;
+ "services.sync.declinedEngines" = "passwords";
+ "services.sync.engine.passwords" = false;
+ "toolkit.legacyUserProfileCustomizations.stylesheets" = true;
+ };
+ userChrome = builtins.readFile ./userChrome.css;
+ };
+ };
+ };
+ }
diff --git a/home/gui/firefox/userChrome.css b/home/gui/firefox/userChrome.css
new file mode 100644
index 0000000..ad04d9b
--- /dev/null
+++ b/home/gui/firefox/userChrome.css
@@ -0,0 +1,14 @@
+#main-window[tabsintitlebar="true"]:not([extradragspace="true"]) #TabsToolbar > .toolbar-items {
+ opacity: 0;
+ pointer-events: none;
+}
+#main-window:not([tabsintitlebar="true"]) #TabsToolbar {
+ visibility: collapse !important;
+}
+#sidebar-box[sidebarcommand="treestyletab_piro_sakura_ne_jp-sidebar-action"] #sidebar-header {
+ display: none;
+}
+.tab {
+ margin-left: 1px;
+ margin-right: 1px;
+}
\ No newline at end of file
diff --git a/home/gui/kitty/default.nix b/home/gui/kitty/default.nix
new file mode 100644
index 0000000..7c43a97
--- /dev/null
+++ b/home/gui/kitty/default.nix
@@ -0,0 +1,61 @@
+{
+ config,
+ ...
+}: {
+ programs.kitty = {
+ enable = true;
+ settings = {
+ foreground = "#${config.colorScheme.colors.base07}";
+ background = "#${config.colorScheme.colors.base00}";
+ selection_foreground = "#${config.colorScheme.colors.base07}";
+ selection_background = "#${config.colorScheme.colors.base03}";
+ background_opacity = "0.9";
+
+ cursor = "#${config.colorScheme.colors.base05}";
+ cursor_text_color = "#${config.colorScheme.colors.base01}";
+
+ url_color = "#${config.colorScheme.colors.base05}";
+
+ active_border_color = "#${config.colorScheme.colors.base05}";
+ inactive_border_color = "#${config.colorScheme.colors.base03}";
+ bell_border_color = "#${config.colorScheme.colors.base09}";
+
+ wayland_titlebar_color = "system";
+ macos_titlebar_color = "system";
+
+ active_tab_foreground = "#${config.colorScheme.colors.base0C}";
+ active_tab_background = "#${config.colorScheme.colors.base01}";
+ inactive_tab_foreground = "#${config.colorScheme.colors.base06}";
+ inactive_tab_background = "#${config.colorScheme.colors.base00}";
+ tab_bar_background = "#${config.colorScheme.colors.base02}";
+
+ mark1_foreground = "#${config.colorScheme.colors.base00}";
+ mark1_background = "#${config.colorScheme.colors.base0C}";
+ mark2_foreground = "#${config.colorScheme.colors.base00}";
+ mark2_background = "#${config.colorScheme.colors.base0E}";
+ mark3_foreground = "#${config.colorScheme.colors.base00}";
+ mark3_background = "#${config.colorScheme.colors.base0A}";
+
+ color0= "#${config.colorScheme.colors.base00}";
+ color1= "#${config.colorScheme.colors.base01}";
+ color2= "#${config.colorScheme.colors.base02}";
+ color3= "#${config.colorScheme.colors.base03}";
+ color4= "#${config.colorScheme.colors.base04}";
+ color5= "#${config.colorScheme.colors.base05}";
+ color6= "#${config.colorScheme.colors.base06}";
+ color7= "#${config.colorScheme.colors.base07}";
+ color8= "#${config.colorScheme.colors.base08}";
+ color9= "#${config.colorScheme.colors.base09}";
+ color10= "#${config.colorScheme.colors.base0A}";
+ color11= "#${config.colorScheme.colors.base0B}";
+ color12= "#${config.colorScheme.colors.base0C}";
+ color13= "#${config.colorScheme.colors.base0D}";
+ color14= "#${config.colorScheme.colors.base0E}";
+ color15= "#${config.colorScheme.colors.base0F}";
+
+ font_size = 12;
+ window-padding-width = 15;
+ # ...
+ };
+ };
+}
\ No newline at end of file
diff --git a/home/gui/mpv/default.nix b/home/gui/mpv/default.nix
new file mode 100644
index 0000000..4257dc6
--- /dev/null
+++ b/home/gui/mpv/default.nix
@@ -0,0 +1,11 @@
+{
+ pkgs,
+ ...
+}: {
+ programs.mpv = {
+ enable = true;
+ scripts = with pkgs; [
+ mpvScripts.mpris
+ ];
+ };
+}
\ No newline at end of file
diff --git a/home/gui/theme/default.nix b/home/gui/theme/default.nix
new file mode 100644
index 0000000..49c9aba
--- /dev/null
+++ b/home/gui/theme/default.nix
@@ -0,0 +1,40 @@
+{
+ pkgs,
+ inputs,
+ config,
+ ...
+}:
+let
+
+ gtkThemeFromScheme = import ./gtk-theme-gen.nix { inherit pkgs; };
+ nix-colors-lib-contrib = inputs.nix-colors.lib-contrib { inherit pkgs; };
+in
+{
+
+ home.pointerCursor = {
+ package = pkgs.bibata-cursors;
+ name = "Bibata-Modern-Classic";
+ size = 24;
+ gtk.enable = true;
+ x11.enable = true;
+ };
+
+ gtk = {
+ enable = true;
+ theme = {
+ name = "${config.colorscheme.slug}";
+ package = gtkThemeFromScheme {
+ scheme = config.colorScheme;
+ };
+ };
+ iconTheme = {
+ name = "Tela-Circle";
+ package = pkgs.tela-circle-icon-theme;
+ };
+ };
+
+ qt = {
+ enable = true;
+ platformTheme = "gtk";
+ };
+}
diff --git a/home/gui/theme/gtk-theme-gen.nix b/home/gui/theme/gtk-theme-gen.nix
new file mode 100644
index 0000000..96b2088
--- /dev/null
+++ b/home/gui/theme/gtk-theme-gen.nix
@@ -0,0 +1,68 @@
+{ pkgs }:
+{ scheme }:
+
+let
+ rendersvg = pkgs.runCommand "rendersvg" { } ''
+ mkdir -p $out/bin
+ ln -s ${pkgs.resvg}/bin/resvg $out/bin/rendersvg
+ '';
+in
+pkgs.stdenv.mkDerivation rec {
+ name = "generated-gtk-theme-${scheme.slug}";
+ src = pkgs.fetchFromGitHub {
+ owner = "nana-4";
+ repo = "materia-theme";
+ rev = "6e5850388a25f424b8193fe4523504d1dc364175";
+ sha256 = "sha256-I6hpH0VTmftU4+/pRbztuTQcBKcOFBFbNZXJL/2bcgU=";
+ };
+ buildInputs = with pkgs; [
+ sassc
+ bc
+ which
+ rendersvg
+ meson
+ ninja
+ nodePackages.sass
+ gtk4.dev
+ optipng
+ ];
+ phases = [ "unpackPhase" "installPhase" ];
+ installPhase = ''
+ HOME=/build
+ chmod 777 -R .
+ patchShebangs .
+ mkdir -p $out/share/themes
+ mkdir bin
+ sed -e 's/handle-horz-.*//' -e 's/handle-vert-.*//' -i ./src/gtk-2.0/assets.txt
+
+ cat > /build/gtk-colors << EOF
+ BG=${scheme.colors.base00}
+ FG=${scheme.colors.base07}
+ BTN_BG=${scheme.colors.base01}
+ BTN_FG=${scheme.colors.base07}
+ HDR_BG=${scheme.colors.base00}
+ HDR_FG=${scheme.colors.base07}
+ HDR_BTN_BG=${scheme.colors.base01}
+ HDR_BTN_FG=${scheme.colors.base07}
+ MENU_BG=${scheme.colors.base01}
+ MENU_FG=${scheme.colors.base07}
+ ACCENT_BG=${scheme.colors.base0C}
+ ACCENT_FG=${scheme.colors.base00}
+ MATERIA_SURFACE=${scheme.colors.base02}
+ MATERIA_VIEW=${scheme.colors.base01}
+ SEL_BG=${scheme.colors.base03}
+ SEL_FG=${scheme.colors.base0C}
+ TXT_BG=${scheme.colors.base01}
+ TXT_FG=${scheme.colors.base07}
+ WM_BORDER_FOCUS=${scheme.colors.base05}
+ WM_BORDER_UNFOCUS=${scheme.colors.base03}
+ UNITY_DEFAULT_LAUNCHER_STYLE=False
+ NAME=${scheme.slug}
+ MATERIA_STYLE_COMPACT=True
+ EOF
+
+ echo "Changing colours:"
+ ./change_color.sh -o ${scheme.slug} /build/gtk-colors -i False -t "$out/share/themes"
+ chmod 555 -R .
+ '';
+}
\ No newline at end of file
diff --git a/home/gui/various/default.nix b/home/gui/various/default.nix
new file mode 100644
index 0000000..4b31566
--- /dev/null
+++ b/home/gui/various/default.nix
@@ -0,0 +1,13 @@
+{
+ pkgs,
+ lib,
+ inputs,
+ ...
+}: {
+ imports = [
+ ./openttd.nix
+ ];
+
+ home.packages = with pkgs; [
+ ];
+}
\ No newline at end of file
diff --git a/home/gui/various/openttd.nix b/home/gui/various/openttd.nix
new file mode 100644
index 0000000..0ff1fde
--- /dev/null
+++ b/home/gui/various/openttd.nix
@@ -0,0 +1,759 @@
+{
+ config,
+ ...
+}: {
+
+ xdg.configFile."openttd/openttd.cfg".text = ''
+[misc]
+display_opt = SHOW_TOWN_NAMES|SHOW_STATION_NAMES|SHOW_SIGNS|FULL_ANIMATION|FULL_DETAIL|WAYPOINTS|SHOW_COMPETITOR_SIGNS
+extra_display_opt = SHOW_MONEY_TEXT_EFFECTS
+fullscreen = false
+video_hw_accel = true
+video_vsync = true
+support8bpp = no
+graphicsset =
+soundsset = "NoSound"
+musicset =
+videodriver =
+musicdriver =
+sounddriver =
+blitter =
+language = english.lng
+resolution = 1920,1080
+screenshot_format =
+savegame_format =
+rightclick_emulate = false
+small_font = IBM Plex Mono
+medium_font = IBM Plex Mono
+large_font = IBM Plex Mono
+mono_font = IBM Plex Mono
+small_size = 8
+medium_size = 11
+large_size = 14
+mono_size = 11
+small_aa = true
+medium_aa = true
+large_aa = true
+mono_aa = true
+sprite_cache_size_px = 128
+player_face = 0
+transparency_options = 511
+transparency_locks = 0
+invisibility_options = 2
+keyboard =
+keyboard_caps =
+last_newgrf_count = 56
+gui_zoom = 2
+font_zoom = 2
+zoning_overlay_inner = 0
+zoning_overlay_outer = 0
+cargo_payment_x_mode = 0
+extra_transparency_options = 1
+extra_transparency_locks = 0
+
+[difficulty]
+max_no_competitors = 0
+number_towns = 2
+industry_density = 3
+max_loan = 300000
+initial_interest = 2
+vehicle_costs = 0
+competitor_speed = 2
+vehicle_breakdowns = 1
+subsidy_multiplier = 2
+construction_cost = 0
+terrain_type = 2
+quantity_sea_lakes = 1
+economy = false
+line_reverse_mode = false
+disasters = false
+town_council_tolerance = 0
+money_cheat_in_multiplayer = false
+rename_towns_in_multiplayer = false
+vehicle_costs_in_depot = 1
+vehicle_costs_when_stopped = 1
+subsidy_duration = 1
+override_town_settings_in_multiplayer = false
+
+[game_creation]
+town_name = 21
+landscape = temperate
+heightmap_height = 26
+snow_line_height = 10
+rainforest_line_height = 8
+climate_threshold_mode = 0
+snow_coverage = 20
+desert_coverage = 50
+starting_year = 1900
+ending_year = 2050
+land_generator = 1
+oil_refinery_limit = 32
+tgen_smoothness = 1
+variety = 3
+generation_seed = 2479758246
+generation_unique_id = 0
+tree_placer = 2
+heightmap_rotation = 1
+se_flat_world_height = 1
+map_x = 7
+map_y = 7
+water_borders = 15
+custom_town_number = 1
+custom_terrain_type = 30
+custom_sea_level = 1
+min_river_length = 16
+river_route_random = 5
+rivers_top_of_hill = true
+river_tropics_width = 5
+lake_size = 10
+lakes_allowed_in_deserts = false
+amount_of_rivers = 2
+amount_of_rocks = 5
+height_affects_rocks = 0
+build_public_roads = 2
+custom_industry_number = 1
+lake_tropics_width = 5
+coast_tropics_width = 0
+
+[vehicle]
+road_side = right
+train_acceleration_model = 1
+train_braking_model = 0
+roadveh_acceleration_model = 1
+train_slope_steepness = 3
+roadveh_slope_steepness = 7
+max_train_length = 12
+smoke_amount = 1
+never_expire_vehicles = false
+no_expire_vehicles_after = 0
+no_introduce_vehicles_after = 0
+max_trains = 500
+max_roadveh = 500
+max_aircraft = 0
+max_ships = 300
+wagon_speed_limits = true
+disable_elrails = false
+freight_trains = 1
+plane_speed = 4
+dynamic_engines = true
+plane_crashes = 2
+improved_breakdowns = false
+ship_collision_avoidance = true
+no_train_crash_other_company = false
+flip_direction_all_trains = false
+roadveh_articulated_overtaking = true
+drive_through_train_depot = false
+extend_vehicle_life = 0
+adjacent_crossings = true
+safer_crossings = true
+pay_for_repair = true
+repair_cost = 100
+servint_ispercent = false
+servint_trains = 150
+servint_roadveh = 150
+servint_ships = 360
+servint_aircraft = 100
+auto_timetable_by_default = true
+auto_separation_by_default = true
+slow_road_vehicles_in_curves = true
+train_speed_adaptation = false
+realistic_braking_aspect_limited = 0
+through_load_speed_limit = 15
+roadveh_cant_quantum_tunnel = false
+
+[construction]
+map_height_limit = 0
+build_on_slopes = true
+command_pause_level = 2
+enable_build_river = true
+enable_remove_water = true
+terraform_per_64k_frames = 4194304
+terraform_frame_burst = 4096
+clear_per_64k_frames = 4194304
+clear_frame_burst = 4096
+tree_per_64k_frames = 4194304
+tree_frame_burst = 4096
+purchase_land_per_64k_frames = 1048576
+purchase_land_frame_burst = 1024
+build_object_per_64k_frames = 2097152
+build_object_frame_burst = 2048
+autoslope = true
+extra_dynamite = true
+max_bridge_length = 128
+max_bridge_height = 12
+max_tunnel_length = 128
+chunnel = true
+train_signal_side = 1
+road_stop_on_town_road = true
+road_stop_on_competitor_road = true
+road_custom_bridge_heads = true
+rail_custom_bridge_heads = true
+allow_grf_objects_under_bridges = false
+allow_stations_under_bridges = false
+allow_road_stops_under_bridges = true
+allow_docks_under_bridges = true
+purchase_land_permitted = 2
+build_object_area_permitted = true
+raw_industry_construction = 0
+industry_platform = 1
+maximum_signal_evaluations = 256
+freeform_edges = true
+extra_tree_placement = 2
+trees_around_snow_line_enabled = true
+trees_around_snow_line_range = 8
+tree_growth_rate = 0
+no_expire_objects_after = 0
+ignore_object_intro_dates = false
+trees_around_snow_line_dynamic_range = 75
+
+[station]
+never_expire_airports = false
+station_spread = 16
+modified_catchment = true
+catchment_increase = 0
+cargo_class_rating_wait_time = false
+station_size_rating_cargo_amount = false
+serve_neutral_industries = true
+adjacent_stations = true
+distant_join_stations = true
+station_delivery_mode = 0
+
+[economy]
+town_layout = 1
+allow_town_roads = true
+found_town = 1
+allow_town_level_crossings = true
+town_cargogen_mode = 1
+town_cargo_scale_factor = 0
+industry_cargo_scale_factor = 0
+station_noise_level = false
+inflation = false
+inflation_fixed_dates = true
+day_length_factor = 5
+multiple_industry_per_town = false
+bribe = true
+exclusive_rights = true
+fund_buildings = true
+fund_roads = true
+give_money = true
+type = 1
+allow_shares = false
+min_years_for_shares = 6
+feeder_payment_share = 75
+town_growth_rate = 2
+town_zone_calc_mode = false
+town_zone_0_mult = 15
+town_zone_1_mult = 9
+town_zone_2_mult = 0
+town_zone_3_mult = 5
+town_zone_4_mult = 3
+city_zone_0_mult = 15
+city_zone_1_mult = 9
+city_zone_2_mult = 0
+city_zone_3_mult = 5
+city_zone_4_mult = 3
+town_growth_cargo_transported = 0
+larger_towns = 4
+initial_city_size = 2
+mod_road_rebuild = true
+town_min_distance = 20
+infrastructure_sharing[0] = true
+infrastructure_sharing[1] = true
+infrastructure_sharing[2] = true
+infrastructure_sharing[3] = false
+sharing_fee[0] = 100
+sharing_fee[1] = 100
+sharing_fee[2] = 100
+sharing_fee[3] = 100
+sharing_payment_in_debt = true
+dist_local_authority = 20
+town_noise_population[0] = 800
+town_noise_population[1] = 2000
+town_noise_population[2] = 4000
+infrastructure_maintenance = false
+random_road_reconstruction = 0
+max_town_heightlevel = 255
+min_town_land_area = 0
+min_city_land_area = 75
+town_build_tunnels = 2
+town_max_road_slope = 4
+
+[linkgraph]
+recalc_interval = 4
+recalc_time = 16
+recalc_not_scaled_by_daylength = true
+distribution_pax = 2
+distribution_mail = 2
+distribution_armoured = 0
+distribution_default = 0
+accuracy = 16
+demand_distance = 100
+demand_size = 100
+short_path_saturation = 80
+aircraft_link_scale = 100
+
+[pf]
+forbid_90_deg = false
+roadveh_queue = true
+reroute_rv_on_layout_change = 1
+pathfinder_for_trains = 2
+pathfinder_for_roadvehs = 2
+pathfinder_for_ships = 2
+reverse_at_signals = false
+wait_oneway_signal = 15
+wait_twoway_signal = 41
+wait_for_pbs_path = 30
+reserve_paths = false
+path_backoff_interval = 20
+npf.npf_max_search_nodes = 10000
+npf.npf_rail_firstred_penalty = 1000
+npf.npf_rail_firstred_exit_penalty = 10000
+npf.npf_rail_lastred_penalty = 1000
+npf.npf_rail_station_penalty = 100
+npf.npf_rail_slope_penalty = 100
+npf.npf_rail_curve_penalty = 100
+npf.npf_rail_depot_reverse_penalty = 5000
+npf.npf_rail_pbs_cross_penalty = 300
+npf.npf_rail_pbs_signal_back_penalty = 1500
+npf.npf_buoy_penalty = 200
+npf.npf_water_curve_penalty = 100
+npf.npf_road_curve_penalty = 100
+npf.npf_crossing_penalty = 300
+npf.npf_road_drive_through_penalty = 800
+npf.npf_road_dt_occupied_penalty = 800
+npf.npf_road_bay_occupied_penalty = 1500
+npf.maximum_go_to_depot_penalty = 2000
+yapf.disable_node_optimization = false
+yapf.max_search_nodes = 10000
+yapf.rail_firstred_twoway_eol = false
+yapf.rail_firstred_penalty = 1000
+yapf.rail_firstred_exit_penalty = 10000
+yapf.rail_lastred_penalty = 1000
+yapf.rail_lastred_exit_penalty = 10000
+yapf.rail_station_penalty = 1000
+yapf.rail_slope_penalty = 200
+yapf.rail_curve45_penalty = 100
+yapf.rail_curve90_penalty = 600
+yapf.rail_depot_reverse_penalty = 5000
+yapf.rail_crossing_penalty = 300
+yapf.rail_look_ahead_max_signals = 10
+yapf.rail_look_ahead_signal_p0 = 500
+yapf.rail_look_ahead_signal_p1 = -100
+yapf.rail_look_ahead_signal_p2 = 5
+yapf.rail_pbs_cross_penalty = 300
+yapf.rail_pbs_station_penalty = 800
+yapf.rail_pbs_signal_back_penalty = 1500
+yapf.rail_doubleslip_penalty = 100
+yapf.rail_longer_platform_penalty = 800
+yapf.rail_longer_platform_per_tile_penalty = 0
+yapf.rail_shorter_platform_penalty = 4000
+yapf.rail_shorter_platform_per_tile_penalty = 0
+yapf.road_slope_penalty = 200
+yapf.road_curve_penalty = 100
+yapf.road_crossing_penalty = 300
+yapf.road_stop_penalty = 800
+yapf.road_stop_occupied_penalty = 800
+yapf.road_stop_bay_occupied_penalty = 1500
+yapf.maximum_go_to_depot_penalty = 2000
+yapf.ship_curve45_penalty = 100
+yapf.ship_curve90_penalty = 600
+back_of_one_way_pbs_waiting_point = true
+
+[order]
+no_servicing_if_no_breakdowns = true
+improved_load = true
+selectgoods = true
+serviceathelipad = true
+nonstop_only = false
+gradual_loading = true
+
+[script]
+settings_profile = easy
+script_max_opcode_till_suspend = 10000
+script_max_memory_megabytes = 1024
+
+[ai]
+ai_in_multiplayer = true
+ai_disable_veh_train = false
+ai_disable_veh_roadveh = false
+ai_disable_veh_aircraft = false
+ai_disable_veh_ship = false
+
+[locale]
+currency = CHF
+units_velocity = metric
+units_power = si
+units_weight = metric
+units_volume = metric
+units_force = si
+units_height = si
+digit_group_separator =
+digit_group_separator_currency =
+digit_decimal_separator =
+
+[gui]
+autosave = monthly
+threaded_saves = true
+date_format_in_default_names = iso
+show_finances = true
+auto_scrolling = 0
+scroll_mode = 0
+smooth_scroll = false
+right_mouse_wnd_close = true
+measure_tooltip = true
+errmsg_duration = 5
+hover_delay_ms = 250
+osk_activation = disabled
+toolbar_pos = 1
+statusbar_pos = 1
+window_snap_radius = 10
+window_soft_limit = 20
+zoom_min = 0
+zoom_max = 9
+sprite_zoom_min = 0
+population_in_label = true
+link_terraform_toolbar = false
+smallmap_land_colour = 0
+liveries = 2
+starting_colour = 16
+auto_remove_signals = false
+prefer_teamchat = false
+scrollwheel_scrolling = 0
+scrollwheel_multiplier = 5
+viewport_map_scan_surroundings = true
+show_slopes_on_viewport_map = true
+show_bridges_on_map = true
+show_tunnels_on_map = true
+show_vehicle_route = 1
+dash_level_of_route_lines = 0
+use_owner_colour_for_tunnelbridge = false
+show_scrolling_viewport_on_map = 3
+default_viewport_map_mode = 0
+action_when_viewport_map_is_dblclicked = 1
+pause_on_newgame = true
+advanced_vehicle_list = 1
+timetable_in_ticks = false
+timetable_leftover_ticks = false
+override_time_settings = false
+time_in_minutes = false
+ticks_per_minute = 74
+clock_offset = 0
+date_with_time = 0
+timetable_start_text_entry = false
+timetable_arrival_departure = true
+max_departures = 10
+max_departure_time = 120
+departure_calc_frequency = 10
+departure_show_vehicle = false
+departure_show_group = false
+departure_show_company = false
+departure_show_vehicle_type = false
+departure_show_vehicle_color = false
+departure_larger_font = false
+departure_destination_type = false
+departure_show_both = false
+departure_only_passengers = false
+departure_smart_terminus = false
+departure_show_all_stops = false
+departure_merge_identical = false
+departure_conditionals = 0
+quick_goto = true
+loading_indicators = 1
+default_rail_type = 0
+default_road_type = 0
+enable_signal_gui = true
+coloured_news_year = 2000
+drag_signals_density = 4
+drag_signals_fixed_distance = false
+semaphore_build_before = 1950
+vehicle_income_warn = true
+order_review_system = 2
+no_depot_order_warn = false
+lost_vehicle_warn = true
+restriction_wait_vehicle_warn = false
+new_nonstop = true
+stop_location = 2
+keep_all_autosave = false
+autosave_on_exit = false
+autosave_on_network_disconnect = true
+max_num_autosaves = 16
+savegame_overwrite_confirm = yes
+auto_euro = true
+news_message_timeout = 2
+show_track_reservation = true
+default_signal_type = 4
+cycle_signal_types = 0
+station_numtracks = 4
+station_platlength = 7
+station_dragdrop = false
+station_show_coverage = true
+persistent_buildingtools = true
+expenses_layout = true
+station_gui_group_order = 3
+station_gui_sort_by = 0
+station_gui_sort_order = 0
+missing_strings_threshold = 25
+graph_line_thickness = 3
+show_vehicle_route_steps = true
+show_train_length_in_details = true
+show_train_weight_ratios_in_details = false
+show_vehicle_group_in_details = true
+show_vehicle_list_company_colour = true
+show_restricted_signal_default = true
+show_adv_tracerestrict_features = true
+show_progsig_ui = true
+show_veh_list_cargo_filter = true
+enable_single_veh_shared_order_gui = false
+show_adv_load_mode_features = true
+disable_top_veh_list_mass_actions = false
+adv_sig_bridge_tun_modes = true
+show_depot_sell_gui = false
+open_vehicle_gui_clone_share = false
+show_newgrf_name = false
+linkgraph_colours = 0
+vehicle_names = 1
+shade_trees_on_slopes = true
+show_date_in_logs = false
+settings_restriction_mode = 2
+developer = 1
+newgrf_developer_tools = false
+ai_developer_tools = false
+scenario_developer = false
+newgrf_show_old_versions = false
+newgrf_default_palette = 1
+console_show_unlisted = false
+console_backlog_timeout = 100
+console_backlog_length = 100
+refresh_rate = 60
+fast_forward_speed_limit = 2500
+network_chat_box_width_pct = 40
+network_chat_box_height = 25
+network_chat_timeout = 20
+sort_track_types_by_speed = false
+station_rating_tooltip_mode = 1
+demolish_confirm_mode = 2
+experimental_dual_pane_train_purchase_window = false
+dual_pane_train_purchase_window = true
+show_noentrysig_ui = true
+autosave_custom_days = 14
+autosave_custom_minutes = 30
+signal_gui_mode = 0
+show_all_signal_default = true
+show_wagon_intro_year = false
+allow_hiding_waypoint_labels = false
+disable_water_animation = 255
+show_order_occupancy_by_default = false
+show_order_management_button = false
+show_group_hierarchy_name = false
+show_vehicle_group_hierarchy_name = false
+newgrf_disable_big_gui = false
+show_vehicle_route_mode = 1
+dual_pane_train_purchase_window_dual_buttons = true
+
+[game_time]
+time_in_minutes = false
+ticks_per_minute = 74
+clock_offset = 0
+
+[sound]
+news_ticker = false
+news_full = false
+new_year = false
+confirm = false
+click_beep = false
+disaster = false
+vehicle = false
+ambient = false
+
+[music]
+playlist = 0
+music_vol = 50
+effect_vol = 100
+custom_1 = 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+custom_2 = 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+playing = true
+shuffle = false
+
+[news_display]
+arrival_player = full
+arrival_other = summarized
+accident = full
+company_info = full
+open = summarized
+close = summarized
+economy = full
+production_player = summarized
+production_other = off
+production_nobody = off
+advice = full
+new_vehicles = full
+acceptance = full
+subsidies = summarized
+general = full
+accident_other = full
+
+[scenario]
+multiple_buildings = false
+house_ignore_dates = false
+house_ignore_zones = 0
+house_ignore_grf = false
+
+[network]
+commands_per_frame = 2
+max_commands_in_queue = 16
+bytes_per_frame = 8
+bytes_per_frame_burst = 256
+max_init_time = 100
+max_join_time = 500
+max_download_time = 1000
+max_password_time = 2000
+max_lag_time = 500
+pause_on_join = true
+server_port = 3979
+server_admin_port = 3977
+server_admin_chat = true
+autoclean_companies = false
+autoclean_unprotected = 12
+autoclean_protected = 36
+autoclean_novehicles = 0
+max_companies = 15
+max_clients = 25
+max_spectators = 15
+restart_game_year = 0
+min_active_clients = 0
+reload_cfg = false
+last_host =
+last_port = 0
+no_http_content_downloads = false
+server_game_type = public
+use_relay_service = ask
+
+[currency]
+rate = 1
+separator = "."
+to_euro = 0
+prefix =
+suffix = " credits"
+
+[company]
+engine_renew = true
+engine_renew_months = 6
+engine_renew_money = 100000
+renew_keep_length = false
+auto_timetable_separation_rate = 40
+timetable_autofill_rounding = 74
+order_occupancy_smoothness = 75
+infra_others_buy_in_depot[0] = false
+infra_others_buy_in_depot[1] = false
+infra_others_buy_in_depot[2] = false
+infra_others_buy_in_depot[3] = false
+advance_order_on_clone = false
+copy_clone_add_to_group = true
+simulated_wormhole_signals = 4
+
+[ai_players]
+none = start_date=730
+none = start_date=730
+none = start_date=730
+none = start_date=730
+none = start_date=730
+none = start_date=730
+none = start_date=730
+none = start_date=730
+none = start_date=730
+none = start_date=730
+none = start_date=730
+none = start_date=730
+none = start_date=730
+none = start_date=730
+none = start_date=730
+
+[game_scripts]
+none =
+
+[version]
+version_string = jgrpp-0.50.3
+version_number = 1E006D64
+ini_version = 2
+
+[preset-TEST]
+444C1105|4AC44465E334F062F56BC24C728C8E72|dach_trains-0.3.2/dach.grf = 1
+52571203|2E00A55DF056E0F4BD7BBC2517514DC7|egrvts2-202/egrvts2.grf = 0 62 2 0
+45520C00|FCF4EE39F19C02D9E8603D07621DDD99|japanese_town_names.0.6/jpset_namw.grf =
+52453400|B2E27B74A3894198A00139CFCF09D011|japanese_buildings-3.1/jpbuild.grf = 2 0 1
+474C0000|1E5E4C815B905749AAE94142C1A67B8B|japanese_faces-3.0/jpfaces.grf =
+52453200|A222F0B3BCF0CFE187A7868116A00C49|japanset_landscape-3.2/jpland.grf = 1 0 1 0 0
+2C320A01|065916BDB63F43BBB4A686E1B4954004|japanese_signals-3.0/jpsignals.grf = 1
+45530500|D9BE5AFA481FC3E0A96E6EB72B455612|japanese_stations-3.6/jpstations.grf = 1 1 1 1
+52453300|EF6A4519AD4C18B9B9112B8D7083862D|japanese_trees-3.0/jptrees.grf =
+44503000|0BF5A48500990CF4CBFED5D7CC6ED120|japanese_tracks-3.2/jptracks.grf = 0 0 0 2 2 1 1 1 3 1 0
+42531320|45C480EEF47E0A8B67CA4E1B1DC30604|jp_multiple_units_jgr_jnr_jr-0.4.2/jpplus_v042.grf = 1 2 1 1 1
+535A0D00|21AC703CAB2BE6A80FAF2344366FE0C1|japanese_train_set-3.3/jptrains.grf = 0 1 1 2 2 1 1 1 0 1 0 0
+44501401|5B9D588504701CCC2BB14CDB1F18D06B|japanese_maglevs-3.1/jptrainsadd.grf = 0 0 0 0 0 1 1 1
+736C6602|2DB244FD410D77FCCE2DE6D5AF09DF51|japanese_city_names-1/jpcities.grf =
+"454E1302|623C32CFD50835F484DBBD42EC45FE3D|japanese_suspended_monorail_set-1.1/jpsusmon nrt.grf" = 1 2 2
+1560B248|76BE5A3BA8C66817C14CFA05177D20D9|redfish-0.4/redfish.grf = 1 1 0
+454E2001|342B064182A42854EF830BC11BE86E4E|real_international_maglev_set-1.6/rims.grf = 1 2 2 0 2 1 1 1 1 0 0 0 1 1 0 1
+41533031|B21E7D6ADD69B1C07643939764FB4878|swedish_houses-1.1.2/swehouses.grf =
+74677563|8A53DE2FF752868097FBE403FACD8DA4|total_bridge_renewal_japan-1.12/total_bridgesw.grf =
+4A565201|934DD16DC79E23A741D9C372AC5B67D3|project_gondola-0.4/gondola.grf =
+4A544E45|8F3301887E272D775C331163F2C71CE5|japanese_town_names_extended-0.1/jtne.grf =
+56420202|B2EB887D411D23173688A4F72BE7184C|purr_universal_rainbow_rails-0.0.7/purr.grf = 0 1 0 0 0 0 0 0 0 0 0 0 20 35 35 35 35
+
+[client_locale]
+sync_locale_network_server = false
+
+[preset-MAIN]
+41560103|FAD3EB34DE1CBAF515FD7A870C4F9A08|egrvts_v2.1-r237/egrvts2_1.grf = 0 63 0 3 0
+4A544E45|8F3301887E272D775C331163F2C71CE5|japanese_town_names_extended-0.1/jtne.grf =
+41533031|B21E7D6ADD69B1C07643939764FB4878|swedish_houses-1.1.2/swehouses.grf =
+52453400|B2E27B74A3894198A00139CFCF09D011|japanese_buildings-3.1/jpbuild.grf = 2 0 1
+474C0000|1E5E4C815B905749AAE94142C1A67B8B|japanese_faces-3.0/jpfaces.grf =
+52453200|A222F0B3BCF0CFE187A7868116A00C49|japanset_landscape-3.2/jpland.grf = 1 0 1 0 0
+2C320A01|065916BDB63F43BBB4A686E1B4954004|japanese_signals-3.0/jpsignals.grf = 1
+45530500|D9BE5AFA481FC3E0A96E6EB72B455612|japanese_stations-3.6/jpstations.grf = 1 1 1 1
+52453300|EF6A4519AD4C18B9B9112B8D7083862D|japanese_trees-3.0/jptrees.grf =
+44503000|0BF5A48500990CF4CBFED5D7CC6ED120|japanese_tracks-3.2/jptracks.grf = 0 0 0 2 2 1 1 1 3 1 0
+42531320|45C480EEF47E0A8B67CA4E1B1DC30604|jp_multiple_units_jgr_jnr_jr-0.4.2/jpplus_v042.grf = 1 2 1 1 1
+4B523033|A2FD753BC20D1F1F7E0DF9AD5F09FECB|jp_shinkansen-0.2.1/jpplusshinkansen_v0.2.1.grf = 1 2 1 0 1 0 1
+595AAA01|24705D6F58BF2D6686AF3915B5CE7006|jp_metro_set-5.1/jpmetro.grf = 1 1 2
+444C1105|4AC44465E334F062F56BC24C728C8E72|dach_trains-0.3.2/dach.grf = 1
+"454E1302|623C32CFD50835F484DBBD42EC45FE3D|japanese_suspended_monorail_set-1.1/jpsusmon nrt.grf" = 1 2 2
+1560B248|76BE5A3BA8C66817C14CFA05177D20D9|redfish-0.4/redfish.grf = 1 1 0
+454E2001|342B064182A42854EF830BC11BE86E4E|real_international_maglev_set-1.6/rims.grf = 1 2 2 0 2 1 1 1 1 0 0 0 1 1 0 1
+74677563|8A53DE2FF752868097FBE403FACD8DA4|total_bridge_renewal_japan-1.12/total_bridgesw.grf =
+4A565201|934DD16DC79E23A741D9C372AC5B67D3|project_gondola-0.4/gondola.grf =
+F1250008|6A2E778BFF67AB76437696ED1C3C780A|firs_industry_replacement_set_4-4.15.1/firs.grf = 1 0 0 0 0 0 16 150 80 300 1
+535A0D00|21AC703CAB2BE6A80FAF2344366FE0C1|japanese_train_set-3.3/jptrains.grf = 0 1 1 2 1 0 1 1 0 1 0 0
+44501401|5B9D588504701CCC2BB14CDB1F18D06B|japanese_maglevs-3.1/jptrainsadd.grf = 0 0 0 0 0 1 1 1
+
+[newgrf]
+41560103|FAD3EB34DE1CBAF515FD7A870C4F9A08|egrvts_v2.1-r237/egrvts2_1.grf = 0 63 0 3 0
+4A544E45|8F3301887E272D775C331163F2C71CE5|japanese_town_names_extended-0.1/jtne.grf =
+41533031|B21E7D6ADD69B1C07643939764FB4878|swedish_houses-1.1.2/swehouses.grf =
+52453400|B2E27B74A3894198A00139CFCF09D011|japanese_buildings-3.1/jpbuild.grf = 2 0 1
+474C0000|1E5E4C815B905749AAE94142C1A67B8B|japanese_faces-3.0/jpfaces.grf =
+52453200|A222F0B3BCF0CFE187A7868116A00C49|japanset_landscape-3.2/jpland.grf = 1 0 1 0 0
+2C320A01|065916BDB63F43BBB4A686E1B4954004|japanese_signals-3.0/jpsignals.grf = 1
+45530500|D9BE5AFA481FC3E0A96E6EB72B455612|japanese_stations-3.6/jpstations.grf = 1 1 1 1
+52453300|EF6A4519AD4C18B9B9112B8D7083862D|japanese_trees-3.0/jptrees.grf =
+44503000|0BF5A48500990CF4CBFED5D7CC6ED120|japanese_tracks-3.2/jptracks.grf = 0 0 0 2 2 1 1 1 3 1 0
+42531320|45C480EEF47E0A8B67CA4E1B1DC30604|jp_multiple_units_jgr_jnr_jr-0.4.2/jpplus_v042.grf = 1 2 1 1 1
+4B523033|A2FD753BC20D1F1F7E0DF9AD5F09FECB|jp_shinkansen-0.2.1/jpplusshinkansen_v0.2.1.grf = 1 2 1 0 1 0 1
+595AAA01|24705D6F58BF2D6686AF3915B5CE7006|jp_metro_set-5.1/jpmetro.grf = 1 1 2
+444C1105|4AC44465E334F062F56BC24C728C8E72|dach_trains-0.3.2/dach.grf = 1
+"454E1302|623C32CFD50835F484DBBD42EC45FE3D|japanese_suspended_monorail_set-1.1/jpsusmon nrt.grf" = 1 2 2
+1560B248|76BE5A3BA8C66817C14CFA05177D20D9|redfish-0.4/redfish.grf = 1 1 0
+454E2001|342B064182A42854EF830BC11BE86E4E|real_international_maglev_set-1.6/rims.grf = 1 2 2 0 2 1 1 1 1 0 0 0 1 1 0 1
+74677563|8A53DE2FF752868097FBE403FACD8DA4|total_bridge_renewal_japan-1.12/total_bridgesw.grf =
+4A565201|934DD16DC79E23A741D9C372AC5B67D3|project_gondola-0.4/gondola.grf =
+F1250008|6A2E778BFF67AB76437696ED1C3C780A|firs_industry_replacement_set_4-4.15.1/firs.grf = 1 0 0 0 0 0 16 150 80 300 1
+535A0D00|21AC703CAB2BE6A80FAF2344366FE0C1|japanese_train_set-3.3/jptrains.grf = 0 1 1 2 1 0 1 1 0 1 0 0
+44501401|5B9D588504701CCC2BB14CDB1F18D06B|japanese_maglevs-3.1/jptrainsadd.grf = 0 0 0 0 0 1 1 1
+
+[newgrf-static]
+
+ '';
+
+
+}
\ No newline at end of file
diff --git a/home/gui/wayland/default.nix b/home/gui/wayland/default.nix
new file mode 100644
index 0000000..fa6dbed
--- /dev/null
+++ b/home/gui/wayland/default.nix
@@ -0,0 +1,111 @@
+{
+ pkgs,
+ config,
+ ...
+}:
+let
+ wlogout_pkg = pkgs.wlogout;
+in
+{
+
+xdg.configFile."swaylock/config".text =
+''
+screenshots
+grace=5
+effect-pixelate=5
+fade-in=0.2
+
+ignore-empty-password
+font=IBM Plex Mono
+
+color=${config.colorscheme.colors.base00}00
+
+indicator-radius=100
+indicator-thickness=30
+
+separator-color=${config.colorscheme.colors.base00}00
+
+inside-color=${config.colorscheme.colors.base0C}00
+inside-clear-color=${config.colorscheme.colors.base08}FF
+inside-caps-lock-color=${config.colorscheme.colors.base09}00
+inside-ver-color=${config.colorscheme.colors.base0C}FF
+inside-wrong-color=${config.colorscheme.colors.base0F}FF
+
+
+ring-color=${config.colorscheme.colors.base00}00
+ring-clear-color=${config.colorscheme.colors.base00}00
+ring-caps-lock-color=${config.colorscheme.colors.base00}00
+ring-ver-color=${config.colorscheme.colors.base00}00
+ring-wrong-color=${config.colorscheme.colors.base00}00
+
+line-color=${config.colorscheme.colors.base00}00
+line-clear-color=${config.colorscheme.colors.base00}00
+line-caps-lock-color=${config.colorscheme.colors.base00}00
+line-ver-color=${config.colorscheme.colors.base00}00
+line-wrong-color=${config.colorscheme.colors.base00}00
+
+text-color=${config.colorscheme.colors.base00}00
+text-clear-color=${config.colorscheme.colors.base00}00
+text-caps-lock-color=${config.colorscheme.colors.base00}00
+text-ver-color=${config.colorscheme.colors.base00}00
+text-wrong-color=${config.colorscheme.colors.base00}00
+
+
+key-hl-color=${config.colorscheme.colors.base0C}FF
+bs-hl-color=${config.colorscheme.colors.base08}FF
+caps-lock-key-hl-color=${config.colorscheme.colors.base09}FF
+caps-lock-bs-hl-color=${config.colorscheme.colors.base09}FF
+'';
+
+xdg.configFile."wlogout/style.css".text =
+''
+window {
+ font-family: Material Design Icons;
+ font-size: 64pt;
+ color: #${config.colorscheme.colors.base07};
+ background-color: alpha(#${config.colorscheme.colors.base00},0.6);
+}
+
+button {
+ border-radius:7px;
+ border: 2px solid #${config.colorscheme.colors.base03};
+ color: #${config.colorscheme.colors.base07};
+ padding: 20px;
+ background-color: alpha(#${config.colorscheme.colors.base00},0.8);
+ transition: box-shadow 0.2s ease-in-out, background-color 0.2s ease-in-out;
+}
+
+button:hover {
+ background-color: alpha(#${config.colorscheme.colors.base02},0.8);
+}
+
+button:focus {
+ background-color: alpha(#${config.colorscheme.colors.base02},1.0);
+ border: 2px solid #${config.colorscheme.colors.base05};
+}
+
+'';
+
+xdg.configFile."wlogout/layout".text =
+''
+{
+ "label" : "lock",
+ "action" : "swaylock",
+ "text" : "",
+ "keybind" : "l"
+}
+{
+ "label" : "reboot",
+ "action" : "systemctl reboot",
+ "text" : "",
+ "keybind" : "r"
+}
+{
+ "label" : "shutdown",
+ "action" : "systemctl poweroff",
+ "text" : "",
+ "keybind" : "s"
+}
+'';
+
+}
\ No newline at end of file
diff --git a/home/gui/wofi/default.nix b/home/gui/wofi/default.nix
new file mode 100644
index 0000000..1a7ff7d
--- /dev/null
+++ b/home/gui/wofi/default.nix
@@ -0,0 +1,69 @@
+{
+ config,
+ ...
+}: {
+
+ xdg.configFile."wofi/config".text = ''
+ width=280
+ lines=10
+ xoffset=5
+ yoffset=5
+ location=2
+ prompt=
+ filter_rate=100
+ allow_markup=false
+ no_actions=true
+ halign=fill
+ orientation=vertical
+ content_halign=fill
+ insensitive=true
+ allow_images=true
+ image_size=16
+ hide_scroll=true
+ '';
+ xdg.configFile."wofi/style.css".text = ''
+ window {
+ margin: 0px;
+ border-radius:7px;
+ background-color: #${config.colorscheme.colors.base00};
+ }
+
+ #input {
+ all: unset;
+ min-height: 20px;
+ padding: 4px 10px;
+ margin: 4px;
+ border: none;
+ color: #${config.colorscheme.colors.base07};
+ font-weight: bold;
+ background-color: #${config.colorscheme.colors.base01};
+ outline: #${config.colorscheme.colors.base04};
+ }
+
+ #input:selected {
+ color: #${config.colorscheme.colors.base0C};
+ }
+
+ #inner-box {
+ font-weight: bold;
+ border-radius: 0px;
+ }
+
+ #outer-box {
+ margin: 0px;
+ padding: 3px;
+ border-radius: 7px;
+ border: 2px solid #${config.colorscheme.colors.base03};
+ }
+
+ #text:selected {
+ color: #${config.colorscheme.colors.base00};
+ background-color: transparent;
+ }
+
+ #entry:selected {
+ background-color: #${config.colorscheme.colors.base07};
+ }
+ '';
+
+}
\ No newline at end of file
diff --git a/home/gui/zathura/default.nix b/home/gui/zathura/default.nix
new file mode 100644
index 0000000..23ef766
--- /dev/null
+++ b/home/gui/zathura/default.nix
@@ -0,0 +1,48 @@
+{
+ config,
+ ...
+}: {
+ programs.zathura = {
+ enable = true;
+ extraConfig = ''
+ set default-fg "#${config.colorScheme.colors.base06}"
+ set default-bg "#${config.colorScheme.colors.base00}"
+
+ set completion-bg "#${config.colorScheme.colors.base02}"
+ set completion-fg "#${config.colorScheme.colors.base06}"
+ set completion-highlight-bg "#${config.colorScheme.colors.base03}"
+ set completion-highlight-fg "#${config.colorScheme.colors.base06}"
+ set completion-group-bg "#${config.colorScheme.colors.base01}"
+ set completion-group-fg "#${config.colorScheme.colors.base0C}"
+
+ set statusbar-fg "#${config.colorScheme.colors.base06}"
+ set statusbar-bg "#${config.colorScheme.colors.base01}"
+
+ set notification-bg "#${config.colorScheme.colors.base01}"
+ set notification-fg "#${config.colorScheme.colors.base06}"
+ set notification-error-bg "#${config.colorScheme.colors.base01}"
+ set notification-error-fg "#${config.colorScheme.colors.base0F}"
+ set notification-warning-bg "#${config.colorScheme.colors.base01}"
+ set notification-warning-fg "#${config.colorScheme.colors.base09}"
+
+ set inputbar-fg "#${config.colorScheme.colors.base06}"
+ set inputbar-bg "#${config.colorScheme.colors.base01}"
+
+ set recolor-lightcolor "#${config.colorScheme.colors.base00}"
+ set recolor-darkcolor "#${config.colorScheme.colors.base06}"
+
+ set index-fg "#${config.colorScheme.colors.base06}"
+ set index-bg "#${config.colorScheme.colors.base00}"
+ set index-active-fg "#${config.colorScheme.colors.base06}"
+ set index-active-bg "#${config.colorScheme.colors.base01}"
+
+ set render-loading-bg "#${config.colorScheme.colors.base00}"
+ set render-loading-fg "#${config.colorScheme.colors.base06}"
+
+ set highlight-color "#${config.colorScheme.colors.base04}"
+ set highlight-fg "#${config.colorScheme.colors.base0E}"
+ set highlight-active-color "#${config.colorScheme.colors.base0E}"
+
+ '';
+ };
+}
\ No newline at end of file
diff --git a/home/wayland/default.nix b/home/wayland/default.nix
new file mode 100644
index 0000000..5a7da6e
--- /dev/null
+++ b/home/wayland/default.nix
@@ -0,0 +1,90 @@
+{
+ pkgs,
+ ...
+}:
+
+let
+ dbus-hyprland-environment = pkgs.writeTextFile {
+ name = "dbus-hyprland-environment";
+ destination = "/bin/dbus-hyprland-environment";
+ executable = true;
+ text = ''
+ dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=hyprland
+ systemctl --user stop pipewire pipewire-media-session xdg-desktop-portal xdg-desktop-portal-wlr
+ systemctl --user start pipewire wireplumber pipewire-media-session xdg-desktop-portal xdg-desktop-portal-hyprland
+ '';
+ };
+ in
+{
+
+ imports = [
+ ../../modules/greetd.nix
+ ];
+
+ environment.systemPackages = with pkgs; [
+ dbus-hyprland-environment
+ xdg-user-dirs
+ wayland
+ grim
+ slurp
+ cliphist
+ wl-clipboard
+ wlogout
+ wlr-randr
+ glib
+ ];
+
+ services.dbus.enable = true;
+ xdg.portal = {
+ enable = true;
+ wlr.enable = true;
+ extraPortals = with pkgs; [
+ xdg-desktop-portal-hyprland
+ xdg-desktop-portal-gtk
+ ];
+ };
+
+ programs.xwayland.enable = true;
+
+ environment.sessionVariables = rec {
+ GBM_BACKEND = "amd-drm";
+ __GL_GSYNC_ALLOWED = "0";
+ __GL_VRR_ALLOWED = "0";
+ WLR_DRM_NO_ATOMIC = "1";
+ __GLX_VENDOR_LIBRARY_NAME = "amd";
+ _JAVA_AWT_WM_NONREPARENTING = "1";
+ QT_QPA_PLATFORM = "wayland";
+ QT_WAYLAND_DISABLE_WINDOWDECORATION = "1";
+ GDK_BACKEND = "wayland";
+ WLR_NO_HARDWARE_CURSORS = "1";
+ MOZ_ENABLE_WAYLAND = "1";
+ WLR_BACKEND = "vulkan";
+ WLR_RENDERER = "vulkan";
+ XCURSOR_SIZE = "24";
+ NIXOS_OZONE_WL = "1";
+ PATH = [
+ "$HOME/.local/bin/:$PATH"
+ ];
+ XDG_CACHE_HOME = "$HOME/.cache";
+ XDG_CONFIG_HOME = "$HOME/.config";
+ XDG_DATA_HOME = "$HOME/.local/share";
+ XDG_STATE_HOME = "$HOME/.local/state";
+ XDG_BIN_HOME = "$HOME/.local/bin";
+ };
+
+ environment.etc."greetd/environments".text = ''
+ Hyprland
+ '';
+
+ environment.etc."xdg/user-dirs.defaults".text = ''
+ XDG_DESKTOP_DIR="$HOME/desktop"
+ XDG_DOCUMENTS_DIR="$HOME/files"
+ XDG_DOWNLOAD_DIR="$HOME/download"
+ XDG_MUSIC_DIR="$HOME/media/music"
+ XDG_PICTURES_DIR="$HOME/media/photo"
+ XDG_PUBLICSHARE_DIR="$HOME/pub"
+ XDG_TEMPLATES_DIR="$HOME/media/templates"
+ XDG_VIDEOS_DIR="$HOME/media/video"
+ '';
+
+}
\ No newline at end of file
diff --git a/home/wayland/hyprland/config.nix b/home/wayland/hyprland/config.nix
new file mode 100644
index 0000000..5987745
--- /dev/null
+++ b/home/wayland/hyprland/config.nix
@@ -0,0 +1,232 @@
+{
+ config,
+ ...
+}: {
+ wayland.windowManager.hyprland.extraConfig = ''
+
+# monitor=,addreserved,50,0,0,0
+monitor = HDMI-A-1,1920x1080,5760x0,1 #right
+monitor = DP-2,1920x1080,1920x0,1 #left
+monitor = DP-3,1920x1080@144,3840x0,1 #middle
+
+input {
+ kb_layout = us
+ kb_variant =
+ kb_model =
+ kb_options =
+ kb_rules =
+
+ follow_mouse = 0
+
+ sensitivity = 0 # -0.5 # -1.0 - 1.0, 0 means no modification.
+ force_no_accel = true
+
+ touchpad {
+ natural_scroll=yes
+ disable_while_typing=true
+ scroll_factor=1
+ }
+}
+
+misc {
+ disable_hyprland_logo=true
+ animate_mouse_windowdragging=false
+ animate_manual_resizes=false
+}
+
+general {
+ gaps_in = 8
+ gaps_out = 15
+ border_size = 2
+ col.active_border = rgb(${config.colorScheme.colors.base05})
+ col.inactive_border = rgb(${config.colorScheme.colors.base03})
+
+ col.group_border_active = rgb(${config.colorScheme.colors.base05})
+ col.group_border = rgb(${config.colorScheme.colors.base03})
+
+ layout = dwindle
+}
+
+decoration {
+ rounding = 7
+
+ #blur
+ blur = yes
+ blur_size = 2
+ blur_passes = 1
+ blur_new_optimizations = on
+ multisample_edges = true
+
+ #opactity
+ inactive_opacity = 1.0
+ active_opacity = 1.0
+ fullscreen_opacity = 1.0
+
+ # shadow
+ drop_shadow = no
+ shadow_range = 60
+ shadow_offset = 0 5
+ shadow_render_power = 4
+ col.shadow = rgba(00000099)
+}
+
+animations {
+ enabled = false
+}
+
+dwindle {
+ pseudotile = yes
+ # force_split = 0
+ preserve_split = yes
+}
+
+master {
+ new_is_master = true
+}
+
+gestures {
+ workspace_swipe = off
+}
+
+exec-once = eww open bar & dunst
+
+exec-once = swww init
+
+exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
+exec-once = /nix/store/$(ls -la /nix/store | grep 'polkit-gnome' | grep '4096' | awk '{print $9}' | sed -n '$p')/libexec/polkit-gnome-authentication-agent-1 &
+
+exec-once = wl-paste --type text --watch cliphist store #Stores only text data
+exec-once = wl-paste --type image --watch cliphist store #Stores only image data
+
+exec-once = swayidle -w timeout 600 'swaylock' before-sleep 'swaylock'
+
+
+#windowrules
+windowrulev2 = noshadow, floating:0
+
+windowrulev2 = float, title:^(flying_kitty)$
+windowrulev2 = size 1100 600, title:^(flying_kitty)$
+windowrulev2 = move center, title:^(flying_kitty)$
+windowrulev2 = animation slide, title:^(flying_kitty)$
+windowrulev2 = float, title:^(Volume Control)$
+windowrulev2 = float, title:^(Picture-in-Picture)$
+windowrulev2 = float, title:^(Steam)$
+windowrulev2 = fullscreen, title:^(wlogout)$
+windowrulev2 = float, title:^(wlogout)$
+
+windowrulev2 = workspace 2 silent, class:^(org.telegram.desktop)$
+windowrulev2 = workspace 2 silent, class:^(discord)$
+
+windowrulev2 = workspace 3 silent, class:^(Steam)$
+windowrulev2 = workspace 3 silent, class:^(steam_app)
+windowrulev2 = workspace 3 silent, class:^(gamescope)
+windowrulev2 = workspace 3 silent, class:^(heroic)$
+windowrulev2 = workspace 3 silent, class:^(lutris)$
+
+windowrulev2 = workspace 8 silent, class:^(org.keepassxc.KeePassXC)$
+windowrulev2 = workspace 8 silent, title:^(Nextcloud)$
+windowrulev2 = workspace 8 silent, class:^(Tk)$,title:^(Server Configuration)$
+
+#SPECIAL FLOATERS
+windowrulev2 = float,class:^(org.keepassxc.KeePassXC)$,title:^(KeePassXC - Access Request)$
+windowrulev2 = pin,class:^(org.keepassxc.KeePassXC)$,title:^(KeePassXC - Access Request)$
+windowrulev2 = float,class:^(org.keepassxc.KeePassXC)$,title:^(Unlock Database - KeePassXC)$
+windowrulev2 = pin,class:^(org.keepassxc.KeePassXC)$,title:^(Unlock Database - KeePassXC)$
+windowrulev2 = float,title:^(Open)$
+windowrulev2 = float,title:^(Choose Files)$
+windowrulev2 = float,title:^(Save As)$
+windowrulev2 = float,title:^(Confirm to replace files)$
+windowrulev2 = float,title:^(File Operation Progress)$
+windowrulev2 = float,class:^(firefox)$,title:^(Picture-in-Picture)$
+windowrulev2 = pin,class:^(firefox)$,title:^(Picture-in-Picture)$
+windowrulev2 = nofullscreenrequest,class:^(firefox)$,title:^(Picture-in-Picture)$
+windowrulev2 = nofullscreenrequest,class:^(firefox)$,title:^(Firefox — Sharing Indicator)$
+windowrulev2 = float,class:^(firefox)$,title:^(Firefox — Sharing Indicator)$
+windowrulev2 = float,class:^(org.telegram.desktop)$,title:^(Media viewer)$
+windowrulev2 = center,class:^(org.telegram.desktop)$,title:^(Media viewer)$
+
+#binds
+$mainMod = SUPER
+
+bind = SUPER, RETURN, exec, kitty
+
+bind = SUPER_SHIFT, RETURN,togglespecialworkspace,
+# bind = SUPER_SHIFT, RETURN, exec, kitty --title flying_kitty --single-instance
+bind = SUPER, Q, killactive,
+bind = SUPER, T, togglefloating,
+bind = SUPER, F, fullscreen,
+
+bind = SUPER, D, exec, wofi -modi --show drun
+bind = SUPER SHIFT,D,exec, ~/.config/hypr/themes/apatheia/eww/launch_bar
+
+bind = SUPER, V, exec, cliphist list | wofi -dmenu | cliphist decode | wl-copy
+bind = , Print, exec, grim -g "$(slurp -d)" - | wl-copy
+
+bind = SUPER, L, exec, swaylock
+
+
+bind = SUPER, P, pseudo, # dwindle
+bind = SUPER, J, togglesplit, # dwindle
+bind = SUPER, G, togglegroup
+bind = SUPER, tab, changegroupactive
+
+bind = SUPER, left, movefocus, l
+bind = SUPER, right, movefocus, r
+bind = SUPER, up, movefocus, u
+bind = SUPER, down, movefocus, d
+
+bind = SUPER, 1, workspace, 1
+bind = SUPER, 2, workspace, 2
+bind = SUPER, 3, workspace, 3
+bind = SUPER, 4, workspace, 4
+bind = SUPER, 5, workspace, 5
+bind = SUPER, 6, workspace, 6
+bind = SUPER, 7, workspace, 7
+bind = SUPER, 8, workspace, 8
+bind = SUPER, 9, workspace, 9
+bind = SUPER, 0, workspace, 10
+
+bind = SUPER SHIFT, 1, movetoworkspace, 1
+bind = SUPER SHIFT, 2, movetoworkspace, 2
+bind = SUPER SHIFT, 3, movetoworkspace, 3
+bind = SUPER SHIFT, 4, movetoworkspace, 4
+bind = SUPER SHIFT, 5, movetoworkspace, 5
+bind = SUPER SHIFT, 6, movetoworkspace, 6
+bind = SUPER SHIFT, 7, movetoworkspace, 7
+bind = SUPER SHIFT, 8, movetoworkspace, 8
+bind = SUPER SHIFT, 9, movetoworkspace, 9
+bind = SUPER SHIFT, 0, movetoworkspace, 10
+
+bind = SUPER, mouse_down, workspace, e+1
+bind = SUPER, mouse_up, workspace, e-1
+
+bindm = SUPER, mouse:272, movewindow
+bindm = SUPER, mouse:273, resizewindow
+bind = , XF86AudioPlay, exec, playerctl play-pause
+bind = , XF86AudioPrev, exec, playerctl previous
+bind = , XF86AudioNext, exec, playerctl next
+bind = , XF86AudioRaiseVolume, exec, amixer -q sset 'Master' 5%+
+bind = , XF86AudioLowerVolume, exec, amixer -q sset 'Master' 5%-
+bind = , XF86AudioMute, exec, pactl set-sink-mute @DEFAULT_SINK@ toggle
+bind = , XF86MonBrightnessUp, exec, light -A 5
+bind = , XF86MonBrightnessDown, exec, light -U 5
+
+exec-once = [workspace special silent] kitty --title flying_kitty
+exec-once = sh ~/.config/startup.sh
+ '';
+
+
+ xdg.configFile."startup.sh".text = ''
+#!/bin/sh
+sleep 2
+swww img ~/cloud/dark.jpg
+keepassxc &
+firefox &
+jellyfin-mpv-shim &
+
+sleep 2
+nextcloud &
+telegram-desktop&
+discord&
+ '';
+}
diff --git a/home/wayland/hyprland/default.nix b/home/wayland/hyprland/default.nix
new file mode 100644
index 0000000..a966e4b
--- /dev/null
+++ b/home/wayland/hyprland/default.nix
@@ -0,0 +1,10 @@
+{
+ ...
+}: {
+ imports = [./config.nix];
+
+ wayland.windowManager.hyprland = {
+ enable = true;
+ };
+
+}
\ No newline at end of file
diff --git a/home/xorg/bspwm/config.nix b/home/xorg/bspwm/config.nix
new file mode 100644
index 0000000..28a32db
--- /dev/null
+++ b/home/xorg/bspwm/config.nix
@@ -0,0 +1,318 @@
+{
+ config,
+ ...
+}: {
+ xsession.windowManager.bspwm.extraConfig = ''
+ #! /bin/bash
+
+xrandr > /dev/shm/xrandr_output
+sxhkd &
+/nix/store/$(ls -la /nix/store | grep 'polkit-gnome' | grep '4096' | awk '{print $9}' | sed -n '$p')/libexec/polkit-gnome-authentication-agent-1 &
+
+(xss-lock -- ~/.config/lock.sh || echo "AutoLock Hook Unavailable") &
+
+wmname LG3D
+
+export _IDISP=$(xrandr --query | grep " connected" | cut -d" " -f1 | grep "eDP" )
+
+if [[ $(hostname) == 'Iriy' ]]; then
+ xrandr --output DP-0 --scale 1
+ xrandr --output DVI-I-0 --off --output DVI-I-1 --off --output HDMI-0 --off --output DP-0 --mode 3840x2160 --pos 1920x254 --rotate normal --scale 0.75 --primary --output DP-1 --off --output DP-2 --mode 1920x1080 --pos 0x0 --rotate normal --output DP-3 --off --output DP-4 --mode 1920x1080 --pos 4800x0 --rotate normal --output DP-5 --off
+ bspc monitor DP-4 -d 1
+ bspc monitor DP-2 -d 2 3
+ bspc monitor DP-0 -d 0 4 5 6 7 8 9
+elif [[ $(hostname) == 'valinor' ]]; then
+ bspc monitor $_IDISP -d 1 2 3 4 5 6 7 8 9
+else
+ bspc monitor $_IDISP -d 1 2 3 4 5 6 7 8 9
+fi
+
+bspc config remove_unplugged_monitors true
+bspc config remove_disabled_monitors true
+
+bspc config border_width 2
+bspc config window_gap 6
+bspc config split_ratio 0.52
+bspc config borderless_monocle false
+bspc config gapless_monocle false
+
+
+bspc rule -a Screenkey manage=off
+
+#bspc config super mod4
+bspc config pointer_action1 move
+bspc config pointer_action2 none
+bspc config pointer_action3 resize_corner
+#bspc config click_to_focus true
+#bspc config focus_follows_pointer true
+
+xsetroot -cursor_name left_ptr
+
+feh --bg-fill ~/cloud/dark.jpg
+
+xrdb ~/.Xressources
+
+dunst &
+eww open bar &
+
+
+## Tab Global - Floating/Global Rules
+bspc rule -a URxvt:yakuaki sticky=on state=floating hidden=on rectangle=$(($(xrandr --current | grep ' connected ' | uniq | awk '{print $4}' | cut -d 'x' -f1 | head -n1)-16))x600+$(($(xrandr --current | grep ' connected' | uniq | awk '{print $4}' | cut -d "+" -f2 | head -n1)+8))+$(($(xrandr --current | grep ' connected' | uniq | awk '{print $4}' | cut -d "+" -f3 | head -n1)+36))
+urxvt -name yakuaki -e ~/.config/script/yakuaki &
+kitty
+
+bspc rule -a feh state=floating
+bspc rule -a Confirm state=floating
+bspc rule -a Preferences state=floating
+bspc rule -a dialog state=floating
+bspc rule -a menu state=floating
+bspc rule -a task_dialog state=floating
+bspc rule -a bubble state=floating
+
+
+## Tab 8 - Various & Utility
+bspc rule -a KeePassXC --one-shot desktop=8
+bspc rule -a Nextcloud desktop=8
+bspc rule -a Tk:tk desktop=8
+
+## Tab 4 - Dev
+bspc rule -a VSCodium desktop=4
+
+## Tab 3 - Games & Movies
+# ...
+# ...
+
+## Tab 2 - Coms Main
+bspc rule -a TelegramDesktop desktop=2
+bspc rule -a Instagram desktop=2
+bspc rule -a lightcord desktop=2
+bspc rule -a discord desktop=2
+
+
+## Tab 1 - Internet
+bspc rule -a Firefox --one-shot desktop=1
+bspc rule -a firefox --one-shot desktop=1
+bspc rule -a Google-chrome desktop=1
+bspc rule -a Chromium=1
+
+
+sh ~/.config/startup.sh
+ '';
+
+
+ xdg.configFile."startup.sh".text = ''
+#!/bin/sh
+
+bspc desktop -f 0
+
+keepassxc --keyfile ~/.config/hcl.ico ~/cloud/kek.kdbx --pw-stdin <<< $(rofi -dmenu -password -i -no-fixed-num-lines -p "Password:" -theme themes/pass) &
+
+sleep 2
+bspc desktop -f 0
+
+telegram-desktop &
+discord &
+lightcord &
+nextcloud &
+jellyfin-mpv-shim &
+flameshot &
+
+sleep 2
+
+firefox &
+
+ibus-daemon -drx
+
+easyeffects --gapplication-service &
+bspc desktop -f 0
+ '';
+
+
+ services.sxhkd.extraConfig = ''
+ super + Return
+ urxvt
+
+# terminal floating
+super + shift + Return
+ ~/.config/script/toggle_yakuaki
+
+# program launcher
+super + d
+ rofi -modi "drun" -show drun
+
+super + shift + d
+ rofi -show run
+
+super + Tab
+ rofi -show window
+
+super + Escape
+ pkill -USR1 -x sxhkd; \
+ notify-send "sxhkd config reloaded"
+
+#
+# bspwm hotkeys
+#
+
+# quit bspwm normally
+super + alt + Escape
+ bspc quit
+
+# close and kill
+super + {_,shift + }w
+ bspc node -{c,k}
+
+# alternate between the tiled and monocle layout
+super + m
+ bspc desktop -l next
+
+# if the current node is automatic, send it to the last manual, otherwise pull the last leaf
+super + y
+ bspc query -N -n focused.automatic && bspc node -n last.!automatic || bspc node last.leaf -n focused
+
+# swap the current node and the biggest node
+super + g
+ bspc node -s biggest
+
+#
+# state/flags
+#
+
+# set the window state
+super + {t,shift + t,s,f}
+ bspc node -t {tiled,pseudo_tiled,floating,fullscreen}
+
+# set the node flags
+super + ctrl + {x,y,z}
+ bspc node -g {locked,sticky,private}
+
+#
+# focus/swap
+#
+
+# focus the node in the given direction
+super + shift + {_,ctrl + }{h,j,k,l}
+ bspc node -{f,s} {west,south,north,east}
+
+# focus the node for the given path jump
+# super + {p,b,comma,period}
+# bspc node -f @{parent,brother,first,second}
+
+# focus the next/previous node
+super + {_,shift + }c
+ bspc node -f {next,prev}
+
+# focus the next/previous desktop
+super + bracket{left,right}
+ bspc desktop -f {prev,next}
+
+# focus the last node/desktop
+super + {grave,Tab}
+ bspc {node,desktop} -f last
+
+# focus the older or newer node in the focus history
+super + {o,i}
+ bspc wm -h off; \
+ bspc node {older,newer} -f; \
+ bspc wm -h on
+
+# focus or send to the given desktop
+super + {_,shift + }{1-9,0}
+ bspc {desktop -f,node -d} {1-9,0}
+
+# focus the next/previous node in the same window
+super + {comma,period}
+ bspc node -f {next,prev}.local
+
+#
+# preselect
+#
+
+# preselect the direction
+super + ctrl + {h,j,k,l}
+ bspc node -p {west,south,north,east}
+
+# preselect the ratio
+super + ctrl + {1-9}
+ bspc node -o 0.{1-9}
+
+# cancel the preselection for the focused node
+super + ctrl + space
+ bspc node -p cancel
+
+# cancel the preselection for the focused desktop
+super + ctrl + shift + space
+ bspc query -N -d | xargs -I id -n 1 bspc node id -p cancel
+
+#
+# move/resize
+#
+
+# expand a window by moving one of its side outward
+super + alt + {h,j,k,l}
+ bspc node -z {left -20 0,bottom 0 20,top 0 -20,right 20 0}
+
+# contract a window by moving one of its side inward
+super + alt + shift + {h,j,k,l}
+ bspc node -z {right -20 0,top 0 20,bottom 0 -20,left 20 0}
+
+# move a floating window
+super + {Left,Down,Up,Right}
+ bspc node -v {-20 0,0 20,0 -20,20 0}
+
+super + {equal,minus}
+ bspc config window_gap $(( $(bspc config window_gap) {+,-} 5 ))
+
+super + ctrl + {Left,Right,Up,Down}
+ bspc node @focused:/ --rotate {270,90,180,180}
+
+super + shift + {Left,Right,Up,Down}
+ bspc node -f @parent; bspc node -R 90
+
+# Screenshots
+Print
+ flameshot gui
+
+# Lock Desktop
+super + l
+ ~/.config/script/lock.sh
+
+# Lock Alternative
+super + k
+ xtrlock
+
+# VOLUME
+
+XF86AudioMute
+ pactl set-sink-mute @DEFAULT_SINK@ toggle
+
+XF86AudioRaiseVolume
+ pactl set-sink-volume @DEFAULT_SINK@ +5%
+
+XF86AudioLowerVolume
+ pactl set-sink-volume @DEFAULT_SINK@ -5%
+
+# BRIGHTNESS
+
+# Brightness goes up
+#/home/gamehelp16/Documents/brightness -u
+XF86MonBrightnessUp
+ brightnessctl set +16
+
+# Brightness goes down
+XF86MonBrightnessDown
+ brightnessctl set 16-
+
+super + F1
+ pactl set-source-mute @DEFAULT_SOURCE@ toggle
+
+XF86AudioMicMute
+ pactl set-source-mute @DEFAULT_SOURCE@ toggle
+
+super + F7
+ ~/.config/script/screens.sh
+
+XF86Display
+ ~/.config/script/screens.sh
+ '';
+}
diff --git a/home/xorg/bspwm/default.nix b/home/xorg/bspwm/default.nix
new file mode 100644
index 0000000..fea257a
--- /dev/null
+++ b/home/xorg/bspwm/default.nix
@@ -0,0 +1,18 @@
+{
+ ...
+}: {
+ imports = [
+ ./config.nix
+ ./script.nix
+ ./xressources.nix
+ ];
+
+ xsession.windowManager.bspwm = {
+ enable = true;
+ };
+
+ services.sxhkd = {
+ enable = true;
+ };
+
+}
\ No newline at end of file
diff --git a/home/xorg/bspwm/script.nix b/home/xorg/bspwm/script.nix
new file mode 100644
index 0000000..b1b786c
--- /dev/null
+++ b/home/xorg/bspwm/script.nix
@@ -0,0 +1,92 @@
+{
+ config,
+ ...
+}: {
+
+ xdg.configFile."script/lock.sh".text = ''
+#!/bin/bash
+TMPBG=/tmp/screen.png
+RES=$(xrandr | grep 'current' | sed -E 's/.*current\s([0-9]+)\sx\s([0-9]+).*/\1x\2/')
+
+ffmpeg -f x11grab -video_size $RES -y -i $DISPLAY -filter_complex "boxblur=10:1" -vframes 1 $TMPBG
+
+pkill -xu $EUID -USR1 dunst
+i3lock -i $TMPBG &
+wait
+pkill -xu $EUID -USR1 dunst
+
+rm $TMPBG
+ '';
+
+ xdg.configFile."script/screens.sh".text = ''
+#!/bin/bash
+
+if [[ $(hostname) == 'Iriy' ]]; then
+MENU="$(rofi -sep "|" -dmenu -i -p 'Display Mode' -theme-str 'entry { placeholder: ""; } inputbar { children: [prompt, textbox-prompt-colon, entry];}' -location 2 -xoffset 0 -yoffset 34 -width 8 -hide-scrollbar -line-padding 4 -padding 10 -lines 6 <<< "None | S")"
+ case "$MENU" in
+ *None)
+ xrandr --output DP-0 --scale 1
+ xrandr --output DVI-I-0 --off --output DVI-I-1 --off --output HDMI-0 --off --output DP-0 --mode 3840x2160 --pos 1920x254 --rotate normal --scale 0.75 --primary --output DP-1 --off --output DP-2 --mode 1920x1080 --pos 0x0 --rotate normal --output DP-3 --off --output DP-4 --mode 1920x1080 --pos 4800x0 --rotate normal --output DP-5 --off
+ bspc monitor DP-4 -d 1
+ bspc monitor DP-2 -d 2 3
+ bspc monitor DP-0 -d 0 4 5 6 7 8 9
+ ;;
+ *S)
+ xrandr --output DP-0 --scale 1
+ xrandr --output DVI-I-0 --off --output DVI-I-1 --off --output HDMI-0 --off --output DP-0 --mode 3840x2160 --pos 1920x254 --rotate normal --scale 0.75 --primary --output DP-1 --off --output DP-2 --off --output DP-3 --off --output DP-4 --off --output DP-5 --off
+ bspc monitor DP-0 -d 0 1 2 3 4 5 6 7 8 9
+ ;;
+ *WIP) echo "WIP"
+ esac
+elif [[ $(hostname) == 'valinor' ]]; then
+MENU="$(rofi -sep "|" -dmenu -i -p 'Display Mode' -theme-str 'entry { placeholder: ""; } inputbar { children: [prompt, textbox-prompt-colon, entry];}' -location 2 -xoffset 0 -yoffset 34 -width 8 -hide-scrollbar -line-padding 4 -padding 10 -lines 6 <<< "None|P0|P1")"
+ case "$MENU" in
+ *None)
+ xrandr --output HDMI-1 --off --output DisplayPort-0 --off --output DisplayPort-1 --off --output eDP-1 --auto
+ bspc monitor eDP -d 1 2 3 4 5 6 7 8 9
+ ;;
+ *P0)
+ xrandr --output HDMI-1 --auto --output eDP-1 --auto --below HDMI-1
+ bspc monitor HDMI-1 --swap eDP-1
+ bspc monitor HDMI-1 -d 0
+ bspc monitor eDP-1 -d 1 2 3 4 5 6 7 8 9
+ ;;
+ *P1)
+ xrandr --output eDP-1 --primary --mode 1920x1080 --pos 1200x1200 --rotate normal --output HDMI-1 --mode 1920x1200 --pos 1200x0 --rotate normal --output DisplayPort-1 --mode 1920x1200 --pos 0x210 --rotate left
+ bspc monitor HDMI-1 --swap eDP-1
+ bspc monitor HDMI-1 -d 0
+ bspc monitor eDP -d 1 2 3 4 5 6 7 8 9
+ ;;
+ *WIP) echo "WIP"
+ esac
+fi
+feh --bg-fill ~/cloud/dark.jpg
+ '';
+
+ xdg.configFile."script/yakuaki.sh".text = ''
+#!/bin/bash
+bspc query -N -n any.floating.hidden > /tmp/yakuakid
+~/.config/script/toggle_yakuaki
+$SHELL
+clear
+ '';
+
+ xdg.configFile."script/toggle_yakuaki.sh".text = ''
+#!/bin/bash
+if [[ -e /tmp/yakuakid ]]
+then
+ id=$(cat /tmp/yakuakid)
+ exists=$(bspc query -N $id -n)
+ if [[ $exists = $id ]]
+ then
+ bspc node $id --flag hidden;bspc node -f $id
+ else
+ rm /tmp/yakuakid
+ urxvt -name yakuaki -e ~/.config/script/yakuaki &
+ fi
+else
+ ~/.config/script/yakuaki
+fi
+ '';
+
+}
\ No newline at end of file
diff --git a/home/xorg/bspwm/xressources.nix b/home/xorg/bspwm/xressources.nix
new file mode 100644
index 0000000..4e46801
--- /dev/null
+++ b/home/xorg/bspwm/xressources.nix
@@ -0,0 +1,102 @@
+{
+ config,
+ ...
+}: {
+ xresources.extraConfig = ''
+
+#define white #ffffff
+#define black #000000
+#define cFG #${config.colorScheme.colors.base07}
+#define cBG #${config.colorScheme.colors.base00}
+#define cP #${config.colorScheme.colors.base07}
+#define cH #${config.colorScheme.colors.base0C}
+#define c0 #${config.colorScheme.colors.base00}
+#define c1 #${config.colorScheme.colors.base01}
+#define c2 #${config.colorScheme.colors.base02}
+#define c3 #${config.colorScheme.colors.base03}
+#define c4 #${config.colorScheme.colors.base04}
+#define c5 #${config.colorScheme.colors.base05}
+#define c6 #${config.colorScheme.colors.base06}
+#define c7 #${config.colorScheme.colors.base07}
+#define c8 #${config.colorScheme.colors.base08}
+#define c9 #${config.colorScheme.colors.base09}
+#define cA #${config.colorScheme.colors.base0A}
+#define cB #${config.colorScheme.colors.base0B}
+#define cC #${config.colorScheme.colors.base0C}
+#define cD #${config.colorScheme.colors.base0D}
+#define cE #${config.colorScheme.colors.base0E}
+#define cF #${config.colorScheme.colors.base0F}
+
+Xft.dpi: 96
+
+URxvt.perl-ext-common: default,matcher,tabbed
+URxvt.url-launcher: firefox
+URxvt.matcher.button: 1
+URxvt.url-select.launcher: firefox
+URxvt.url-select.underline: true
+
+!URxvt*loginShell: true
+!URxvt*borderless: true
+URxvt*dynamicColors: on
+
+URxvt*foreground: cFG
+URxvt*background: cBG
+
+URxvt*saveLines: 8192
+URxvt*mapAlert: true
+!URxvt*visualBell: true
+URxvt*pastableTabs: false
+
+URxvt*transparent: True
+URxvt*shading: 25
+
+URxvt*cursorColor: cP
+URxvt*throughColor: cF
+!URxvt*highlightColor: cH
+
+URxvt*font: xft:IBMPlexMono:style=Regular:size=10, xft:OpenMoji:size=11, xft:MaterialDesignIcons:size=11
+URxvt*boldFont: xft:IBMPlexMono:style=Bold:size=10
+URxvt*italicFont: xft:IBMPlexMono:style=Oblique:size=10
+
+URxvt.iso14755: False
+URxvt.scrollBar: False
+URxvt.scrollBar_right: False
+URxvt.scrollBar_floating: False
+URxvt.scrollstyle: rxvt
+
+URxvt.tabbed.tabbar-fg: 7
+URxvt.tabbed.tabbar-bg: 0
+URxvt.tabbed.tab-fg: 7
+URxvt.tabbed.tab-bg: 1
+
+URxvt.letterSpace: true
+
+Xft.antialias: True
+Xft.autohint: False
+Xft.hinting: True
+
+!*.foreground: cFG
+!*.background: cBF
+!*.cursorColor: cP
+
+!*fading:35
+!*faceColor:c1
+
+*.color0: c0
+*.color1: c1
+*.color2: c2
+*.color3: c3
+*.color4: c4
+*.color5: c5
+*.color6: c6
+*.color7: c7
+*.color8: c8
+*.color9: c9
+*.color10: cA
+*.color11: cB
+*.color12: cC
+*.color13: cD
+*.color14: cE
+*.color15: cF
+ '';
+}
\ No newline at end of file
diff --git a/home/xorg/default.nix b/home/xorg/default.nix
new file mode 100644
index 0000000..6a66dc5
--- /dev/null
+++ b/home/xorg/default.nix
@@ -0,0 +1,68 @@
+{
+ pkgs,
+ ...
+}: {
+
+ imports = [
+ ../../modules/greetd.nix
+ ];
+
+ environment.systemPackages = with pkgs; [
+ sxhkd
+ xrandr
+ arandr
+ flameshot
+ xtrlock
+ i3lock
+
+ # dbus-hyprland-environment
+ # xdg-user-dirs
+ # wayland
+ # grim
+ # slurp
+ # cliphist
+ # wl-clipboard
+ # wlogout
+ # wlr-randr
+ # glib
+ ];
+
+
+ services.dbus.enable = true;
+ xdg.portal = {
+ enable = true;
+ };
+
+ programs.bspwm.enable = true;
+
+ environment.sessionVariables = rec {
+ GBM_BACKEND = "amd-drm";
+ __GL_GSYNC_ALLOWED = "0";
+ __GL_VRR_ALLOWED = "0";
+ WLR_DRM_NO_ATOMIC = "1";
+ __GLX_VENDOR_LIBRARY_NAME = "amd";
+ _JAVA_AWT_WM_NONREPARENTING = "1";
+ QT_QPA_PLATFORM = "xcb";
+ QT_WAYLAND_DISABLE_WINDOWDECORATION = "1";
+ GDK_BACKEND = "x11";
+ WLR_NO_HARDWARE_CURSORS = "1";
+ MOZ_ENABLE_WAYLAND = "-";
+ WLR_BACKEND = "vulkan";
+ WLR_RENDERER = "vulkan";
+ XCURSOR_SIZE = "24";
+ NIXOS_OZONE_WL = "1";
+ PATH = [
+ "$HOME/.local/bin/:$PATH"
+ ];
+ XDG_CACHE_HOME = "$HOME/.cache";
+ XDG_CONFIG_HOME = "$HOME/.config";
+ XDG_DATA_HOME = "$HOME/.local/share";
+ XDG_STATE_HOME = "$HOME/.local/state";
+ XDG_BIN_HOME = "$HOME/.local/bin";
+ };
+
+ environment.etc."greetd/environments".text = ''
+ bspwm
+ '';
+
+}
\ No newline at end of file
diff --git a/hosts/_/cfg.nix b/hosts/_/cfg.nix
new file mode 100644
index 0000000..a29b4ee
--- /dev/null
+++ b/hosts/_/cfg.nix
@@ -0,0 +1,27 @@
+{
+ lib,
+ config,
+ ...
+}:
+with lib;
+let
+ cfg = config.hostcfg;
+in {
+ options.hostcfg = {
+ hostname = mkOption {
+ type = types.str;
+ };
+ wlp_if = mkOption {
+ type = types.str;
+ };
+ wg_ip4 = mkOption {
+ type = types.str;
+ };
+ wg_ip6 = mkOption {
+ type = types.str;
+ };
+ wg_pk = mkOption {
+ type = types.str;
+ };
+ };
+}
\ No newline at end of file
diff --git a/hosts/_/home.nix b/hosts/_/home.nix
new file mode 100644
index 0000000..dac2eec
--- /dev/null
+++ b/hosts/_/home.nix
@@ -0,0 +1,71 @@
+{
+ config,
+ pkgs,
+ ...
+}:{
+
+imports = [
+ ../../colors
+ ../../home/cli
+ ../../home/gui
+ ../../home/wayland/hyprland
+];
+
+ systemd.user.startServices = "sd-switch";
+ programs.home-manager.enable = true;
+ services.nextcloud-client.enable = true;
+
+ xdg.userDirs.enable = true;
+ xdg.userDirs.desktop = "${config.home.homeDirectory}/desktop";
+ xdg.userDirs.documents = "${config.home.homeDirectory}/desktop";
+ xdg.userDirs.download = "${config.home.homeDirectory}/downloads";
+ xdg.userDirs.extraConfig = {
+ XDG_MISC_DIR = "${config.home.homeDirectory}/misc";
+ };
+ xdg.userDirs.music = "${config.home.homeDirectory}/media/music";
+ xdg.userDirs.pictures = "${config.home.homeDirectory}/media/photo";
+ xdg.userDirs.publicShare = "${config.home.homeDirectory}/media/photo";
+ xdg.userDirs.templates = "${config.home.homeDirectory}/media/template";
+ xdg.userDirs.videos = "${config.home.homeDirectory}/media/video";
+ xdg.userDirs.createDirectories = true;
+
+ home = {
+ username = "sora";
+ homeDirectory = "/home/sora";
+ packages = with pkgs; [
+ #ui
+ firefox
+ vscodium
+ xfce.thunar
+ xfce.thunar-volman
+ xfce.thunar-archive-plugin
+ discord
+ telegram-desktop
+ obs-studio
+ pavucontrol
+ unzip
+ appimage-run
+ yt-dlp
+ keepassxc
+ nextcloud-client
+ jellyfin-mpv-shim
+
+ #games
+ wineWowPackages.wayland
+ gamemode
+ gamescope
+ mangohud
+ prismlauncher
+ openttd-jgrpp
+ bottles
+
+ #sexyterm
+ cbonsai
+ pipes-rs
+ cmatrix
+ cava
+ ];
+
+ stateVersion = "23.05";
+ };
+}
\ No newline at end of file
diff --git a/hosts/_/host.nix b/hosts/_/host.nix
new file mode 100644
index 0000000..40b4b93
--- /dev/null
+++ b/hosts/_/host.nix
@@ -0,0 +1,155 @@
+{
+ config,
+ pkgs,
+ ...
+}: {
+ imports =
+ [
+ ../../home/wayland
+ # ../../home/xorg
+ ../../modules
+ ];
+
+ time.timeZone = "Europe/Zurich";
+
+ i18n.defaultLocale = "en_GB.UTF-8";
+
+ i18n.extraLocaleSettings = {
+ LC_ADDRESS = "en_GB.UTF-8";
+ LC_IDENTIFICATION = "en_GB.UTF-8";
+ LC_MEASUREMENT = "en_GB.UTF-8";
+ LC_MONETARY = "en_GB.UTF-8";
+ LC_NAME = "en_GB.UTF-8";
+ LC_NUMERIC = "en_GB.UTF-8";
+ LC_PAPER = "en_GB.UTF-8";
+ LC_TELEPHONE = "en_GB.UTF-8";
+ LC_TIME = "en_GB.UTF-8";
+ };
+
+ services = {
+ fstrim = {
+ enable = true;
+ };
+ xserver = {
+ enable = true;
+ videoDrivers = [ "amd" ];
+ layout = "us";
+ xkbVariant = "";
+ excludePackages = [ pkgs.xterm ];
+ desktopManager.xterm.enable = false;
+ };
+ gvfs = {
+ enable = true;
+ };
+ };
+
+ programs.gnupg.agent = {
+ enable = true;
+ enableSSHSupport = true;
+ };
+
+ services.pcscd.enable = true;
+
+ sound.enable = true;
+ hardware.pulseaudio.enable = false;
+ security.rtkit.enable = true;
+ services.pipewire = {
+ enable = true;
+ alsa.enable = true;
+ alsa.support32Bit = true;
+ pulse.enable = true;
+ wireplumber.enable = true;
+ };
+
+ hardware.bluetooth.enable = true;
+ services.blueman.enable = true;
+
+ programs.steam = {
+ enable = true;
+ };
+
+ programs.zsh = {
+ enable = true;
+ };
+
+ programs.ssh = {
+ extraConfig = ''
+ IdentityFile ${config.sops.secrets."${config.hostcfg.hostname}".ssh_priv.path}
+ '';
+ };
+
+ security.polkit.enable = true;
+ security.pam.services.swaylock = {
+ text = ''
+ auth include login
+ '';
+ };
+
+ hardware = {
+ opengl = {
+ enable = true;
+ extraPackages = with pkgs; [];
+ };
+ };
+ users = {
+ defaultUserShell = pkgs.zsh;
+ users.sora = {
+ isNormalUser = true;
+ description = "sora";
+ extraGroups = [ "networkmanager" "wheel" "vboxsf" "lp"];
+ };
+ };
+
+ environment.systemPackages = with pkgs; [
+ wget
+ dconf
+ gvfs
+
+ go
+ cargo
+ nodejs
+
+ polkit_gnome
+ nfs-utils
+ bluez
+ bluez-tools
+
+ jre8
+ jdk8
+ jdk
+ ];
+
+ nix = {
+ package = pkgs.nixFlakes;
+ extraOptions = ''
+ experimental-features = nix-command flakes
+ warn-dirty = false
+ '';
+ gc = {
+ automatic = true;
+ dates = "weekly";
+ options = "--delete-older-than 7d";
+ };
+ settings = {
+ auto-optimise-store = true;
+ builders-use-substitutes = true;
+ substituters = [
+ "https://hyprland.cachix.org"
+ "https://cache.nixos.org"
+ ];
+ trusted-public-keys = [
+ "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
+ "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
+ ];
+ };
+ };
+
+ nixpkgs.config = {
+ permittedInsecurePackages = [
+ ];
+ allowUnfree = true;
+};
+
+system.stateVersion = "unstable";
+
+}
diff --git a/hosts/asgard/default.nix b/hosts/asgard/default.nix
new file mode 100644
index 0000000..71bbf55
--- /dev/null
+++ b/hosts/asgard/default.nix
@@ -0,0 +1,112 @@
+
+{ config, pkgs, ... }:
+
+{
+ imports = [];
+
+ users.users.sora = {
+ home = "/Users/sora";
+ shell = pkgs.zsh;
+ };
+
+ networking = {
+ computerName = "asgard";
+ hostName = "asgard";
+ };
+
+ fonts = {
+ fontDir.enable = true;
+ fonts = with pkgs; [
+ ibm-plex
+ openmoji-color
+ material-design-icons
+ ];
+ };
+
+ environment = {
+ shells = with pkgs; [ zsh ];
+ variables = {
+ EDITOR = "nvim";
+ VISUAL = "vscodium";
+ };
+ systemPackages = with pkgs; [
+ git
+ ranger
+
+ fd
+ ripgrep
+ ];
+ };
+
+ programs = {
+ zsh.enable = true;
+ };
+
+ services = {
+ nix-daemon.enable = true;
+ };
+
+ homebrew = {
+ enable = true;
+ onActivation = {
+ autoUpdate = false;
+ upgrade = false;
+ cleanup = "zap";
+ };
+ brews = [
+ "wireguard-tools"
+ ];
+ casks = [
+ ];
+ };
+
+
+
+ nix = {
+ package = pkgs.nix;
+ extraOptions = ''
+ experimental-features = nix-command flakes
+ warn-dirty = false
+ '';
+ gc = {
+ automatic = true;
+ dates = "weekly";
+ options = "--delete-older-than 7d";
+ };
+ settings = {
+ auto-optimise-store = true;
+ builders-use-substitutes = true;
+ substituters = [
+ "https://cache.nixos.org"
+ ];
+ trusted-public-keys = [
+ "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
+ ];
+ };
+ };
+
+ system = {
+ defaults = {
+ NSGlobalDomain = {
+ KeyRepeat = 1;
+ NSAutomaticCapitalizationEnabled = false;
+ NSAutomaticSpellingCorrectionEnabled = false;
+ };
+ dock = {
+ autohide = true;
+ orientation = "bottom";
+ showhidden = true;
+ tilesize = 40;
+ };
+ finder = {
+ QuitMenuItem = false;
+ };
+ trackpad = {
+ Clicking = true;
+ TrackpadRightClick = true;
+ };
+ };
+ activationScripts.postActivation.text = ''sudo chsh -s ${pkgs.zsh}/bin/zsh'';
+ stateVersion = 4;
+ };
+}
\ No newline at end of file
diff --git a/hosts/asgard/home.nix b/hosts/asgard/home.nix
new file mode 100644
index 0000000..b9bfe37
--- /dev/null
+++ b/hosts/asgard/home.nix
@@ -0,0 +1,14 @@
+{ pkgs, ... }:
+{
+ home = {
+ packages = with pkgs; [];
+ stateVersion = "22.05";
+ };
+
+ programs = {
+ zsh = {
+ enable = true;
+ # FIND SETTINGS FROM /home/cli/zsh
+ };
+ };
+}
\ No newline at end of file
diff --git a/hosts/iriy/default.nix b/hosts/iriy/default.nix
new file mode 100755
index 0000000..92c8700
--- /dev/null
+++ b/hosts/iriy/default.nix
@@ -0,0 +1,32 @@
+{
+ config,
+ pkgs,
+ ...
+}: {
+ imports =
+ [
+ ../_/cfg.nix
+ ./hardware-configuration.nix
+ ../_/host.nix
+ ];
+
+ boot.loader = {
+ systemd-boot = {
+ enable = true;
+ configurationLimit = 8;
+ };
+ efi = {
+ canTouchEfiVariables = true;
+ efiSysMountPoint = "/boot/efi";
+ };
+ };
+
+ hostcfg = {
+ hostname = "iriy";
+ wlp_if = "wlp9s0";
+ wg_ip4 = "10.10.1.7/24";
+ wg_ip6 = "fd10:10:10::7/128";
+ wg_pk = config.sops.secrets.iriy.wg_priv.path;
+ };
+
+}
diff --git a/hosts/iriy/hardware-configuration.nix b/hosts/iriy/hardware-configuration.nix
new file mode 100755
index 0000000..e129319
--- /dev/null
+++ b/hosts/iriy/hardware-configuration.nix
@@ -0,0 +1,37 @@
+# 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.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod" ];
+ boot.initrd.kernelModules = [ ];
+ boot.kernelModules = [ "v4l2loopback" "kvm-amd" ];
+ boot.kernelPackages = pkgs.linuxPackages_latest;
+ boot.extraModulePackages = with config.boot.kernelPackages; [ v4l2loopback.out ];
+
+ virtualisation.libvirtd.enable = true;
+
+ fileSystems."/" =
+ { device = "/dev/disk/by-uuid/f612abce-6f3f-439a-8585-6a050e18b7fc";
+ fsType = "ext4";
+ };
+
+ fileSystems."/boot/efi" =
+ { device = "/dev/disk/by-uuid/349E-5086";
+ fsType = "vfat";
+ };
+
+ swapDevices =
+ [ {
+ device = "/dev/disk/by-uuid/42394c4d-2c81-4917-82ff-75a548715a7d";
+ }];
+
+ nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
+ hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
+ hardware.opengl.driSupport32Bit = true;
+}
diff --git a/hosts/iriy/home.nix b/hosts/iriy/home.nix
new file mode 100755
index 0000000..d9cd0a8
--- /dev/null
+++ b/hosts/iriy/home.nix
@@ -0,0 +1,9 @@
+{config, pkgs, ...}:
+
+{
+
+imports = [
+ ../_/home.nix
+];
+
+}
\ No newline at end of file
diff --git a/hosts/valinor/default.nix b/hosts/valinor/default.nix
new file mode 100755
index 0000000..70bd81c
--- /dev/null
+++ b/hosts/valinor/default.nix
@@ -0,0 +1,33 @@
+{
+ config,
+ pkgs,
+ ...
+}: {
+ imports =
+ [
+ ../_/cfg.nix
+ ./hardware-configuration.nix
+ ../_/host.nix
+ ];
+
+ boot.loader = {
+ systemd-boot = {
+ enable = true;
+ configurationLimit = 8;
+ };
+ efi = {
+ canTouchEfiVariables = true;
+ efiSysMountPoint = "/boot/efi";
+ };
+ };
+
+
+ hostcfg = {
+ hostname = "valinor";
+ wlp_if = "wlp9s0";
+ wg_ip4 = "10.10.1.5/24";
+ wg_ip6 = "fd10:10:10::5/128";
+ wg_pk = config.sops.secrets.valinor.wg_priv.path;
+ };
+
+}
diff --git a/hosts/valinor/hardware-configuration.nix b/hosts/valinor/hardware-configuration.nix
new file mode 100755
index 0000000..fdd6815
--- /dev/null
+++ b/hosts/valinor/hardware-configuration.nix
@@ -0,0 +1,34 @@
+# 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 = [ ];
+
+ boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "usb_storage" "ahci" "sd_mod" "sr_mod" ];
+ boot.initrd.kernelModules = [ ];
+ boot.kernelModules = [ "v4l2loopback" "kvm-amd" ];
+ boot.kernelPackages = pkgs.linuxPackages_latest;
+ boot.extraModulePackages = with config.boot.kernelPackages; [ v4l2loopback.out ];
+
+ virtualisation.libvirtd.enable = true;
+
+ fileSystems."/" =
+ { device = "/dev/disk/by-uuid/6f1fc595-b751-4917-ba87-7b8b02713e6b";
+ fsType = "ext4";
+ };
+
+ fileSystems."/boot/efi" =
+ { device = "/dev/disk/by-uuid/B532-133F";
+ fsType = "vfat";
+ };
+
+ swapDevices =
+ [ { device = "/dev/disk/by-uuid/72ff6aac-d445-4e46-a474-2f1d9be7ea87"; }
+ ];
+
+ nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
+ hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
+ hardware.opengl.driSupport32Bit = true;
+}
diff --git a/hosts/valinor/home.nix b/hosts/valinor/home.nix
new file mode 100755
index 0000000..d9cd0a8
--- /dev/null
+++ b/hosts/valinor/home.nix
@@ -0,0 +1,9 @@
+{config, pkgs, ...}:
+
+{
+
+imports = [
+ ../_/home.nix
+];
+
+}
\ No newline at end of file
diff --git a/modules/default.nix b/modules/default.nix
new file mode 100644
index 0000000..3ea5c2e
--- /dev/null
+++ b/modules/default.nix
@@ -0,0 +1,11 @@
+{
+ ...
+}: {
+ imports = [
+ ./secret.nix
+ ./security.nix
+ ./udevd.nix
+ ./networking.nix
+ ./fonts.nix
+ ];
+}
diff --git a/modules/fonts.nix b/modules/fonts.nix
new file mode 100644
index 0000000..e23cbae
--- /dev/null
+++ b/modules/fonts.nix
@@ -0,0 +1,29 @@
+{
+ pkgs,
+ ...
+}: {
+
+ fonts = {
+ enableDefaultFonts = false;
+ fontDir.enable = true;
+ fonts = with pkgs; [
+ ibm-plex
+ openmoji-color
+ material-design-icons
+ ];
+
+ fontconfig = {
+ enable = true;
+ allowBitmaps = true;
+ defaultFonts = {
+ monospace = [ "IBM Plex Mono" "Openmoji Color" "Material Design Icons" ];
+ serif = [ "IBM Plex Sans" "Openmoji Color" "Material Design Icons" ];
+ sansSerif = [ "IBM Plex Sans" "Openmoji Color" "Material Design Icons" ];
+ emoji = [ "Openmoji Color" ];
+ };
+
+ hinting.style = "hintfull";
+
+ };
+ };
+}
diff --git a/modules/greetd.nix b/modules/greetd.nix
new file mode 100644
index 0000000..87fc48c
--- /dev/null
+++ b/modules/greetd.nix
@@ -0,0 +1,16 @@
+{
+ ...
+}: {
+ services.greetd = {
+ enable = true;
+ settings = rec {
+ initial_session = {
+ command = "zsh";
+ user = "sora";
+ };
+ default_session = initial_session;
+ };
+ };
+}
+
+
diff --git a/modules/networking.nix b/modules/networking.nix
new file mode 100644
index 0000000..7fd7ce4
--- /dev/null
+++ b/modules/networking.nix
@@ -0,0 +1,45 @@
+{
+ config,
+ ...
+}:
+{
+ networking = {
+
+ hostName = config.hostcfg.hostname;
+ useDHCP = true;
+ supplicant = {
+ "${config.hostcfg.wlp_if}" = {
+ configFile.path = config.sops.secrets.wifi.path;
+ extraConf = ''
+ network={
+ ssid="test"
+ psk="12345678"
+ }
+ '';
+ };
+ };
+
+ firewall = {
+ enable = true;
+ };
+
+ wireguard = {
+ enable = true;
+ interfaces = {
+ wg0 = {
+ ips = [ config.hostcfg.wg_ip4 config.hostcfg.wg_ip6 ];
+ privateKeyFile = config.hostcfg.wg_pk;
+ listenPort = 1515;
+ peers = [{
+ allowedIPs = [ "10.10.1.0/24" "fd10:10:10::0/64" ];
+ endpoint = "vpn.helcel.net:1515";
+ publicKey = "NFBJvYXZC+bd62jhrKnM7/pugidWhgR6+C5qIiUiq3Q=";
+ persistentKeepalive = 25;
+ }];
+ };
+ };
+ };
+
+ };
+
+}
\ No newline at end of file
diff --git a/modules/secret.nix b/modules/secret.nix
new file mode 100644
index 0000000..0c48593
--- /dev/null
+++ b/modules/secret.nix
@@ -0,0 +1,16 @@
+{
+ config,
+ ...
+}:{
+ sops.defaultSopsFile = ../secrets/common.yaml;
+ sops.age.keyFile = "/var/lib/sops-nix/age-key.txt"; #opt/nixflake/secrets/age-key.txt;
+ sops.age.generateKey = true;
+
+ sops.secrets.wifi = {};
+
+ sops.secrets."${config.hostcfg.hostname}".ssh_priv = {};
+ sops.secrets."${config.hostcfg.hostname}".ssh_pub = {};
+ sops.secrets."${config.hostcfg.hostname}".wg_priv = {};
+ sops.secrets."${config.hostcfg.hostname}".wg_pub = {};
+
+}
diff --git a/modules/security.nix b/modules/security.nix
new file mode 100644
index 0000000..01fac20
--- /dev/null
+++ b/modules/security.nix
@@ -0,0 +1,51 @@
+# security tweaks borrowed from @hlissner
+{
+ boot.kernel.sysctl = {
+ # The Magic SysRq key is a key combo that allows users connected to the
+ # system console of a Linux kernel to perform some low-level commands.
+ # Disable it, since we don't need it, and is a potential security concern.
+ "kernel.sysrq" = 0;
+
+ ## TCP hardening
+ # Prevent bogus ICMP errors from filling up logs.
+ "net.ipv4.icmp_ignore_bogus_error_responses" = 1;
+ # Reverse path filtering causes the kernel to do source validation of
+ # packets received from all interfaces. This can mitigate IP spoofing.
+ "net.ipv4.conf.default.rp_filter" = 1;
+ "net.ipv4.conf.all.rp_filter" = 1;
+ # Do not accept IP source route packets (we're not a router)
+ "net.ipv4.conf.all.accept_source_route" = 0;
+ "net.ipv6.conf.all.accept_source_route" = 0;
+ # Don't send ICMP redirects (again, we're on a router)
+ "net.ipv4.conf.all.send_redirects" = 0;
+ "net.ipv4.conf.default.send_redirects" = 0;
+ # Refuse ICMP redirects (MITM mitigations)
+ "net.ipv4.conf.all.accept_redirects" = 0;
+ "net.ipv4.conf.default.accept_redirects" = 0;
+ "net.ipv4.conf.all.secure_redirects" = 0;
+ "net.ipv4.conf.default.secure_redirects" = 0;
+ "net.ipv6.conf.all.accept_redirects" = 0;
+ "net.ipv6.conf.default.accept_redirects" = 0;
+ # Protects against SYN flood attacks
+ "net.ipv4.tcp_syncookies" = 1;
+ # Incomplete protection again TIME-WAIT assassination
+ "net.ipv4.tcp_rfc1337" = 1;
+
+ ## TCP optimization
+ # TCP Fast Open is a TCP extension that reduces network latency by packing
+ # data in the sender’s initial TCP SYN. Setting 3 = enable TCP Fast Open for
+ # both incoming and outgoing connections:
+ "net.ipv4.tcp_fastopen" = 3;
+ # Bufferbloat mitigations + slight improvement in throughput & latency
+ "net.ipv4.tcp_congestion_control" = "bbr";
+ "net.core.default_qdisc" = "cake";
+ };
+ boot.kernelModules = ["tcp_bbr"];
+
+ # So we don't have to do this later...
+ security.acme = {
+ acceptTerms = true;
+ defaults.email = "soraefir+git@pm.me";
+ };
+}
+
diff --git a/modules/udevd.nix b/modules/udevd.nix
new file mode 100644
index 0000000..efd2977
--- /dev/null
+++ b/modules/udevd.nix
@@ -0,0 +1,5 @@
+{
+ ...
+}: {
+ systemd.services.systemd-udevd.restartIfChanged = false;
+}
diff --git a/nix.png b/nix.png
new file mode 100644
index 0000000..1b5bdd9
Binary files /dev/null and b/nix.png differ
diff --git a/pkgs/default.nix b/pkgs/default.nix
new file mode 100644
index 0000000..56e7c6c
--- /dev/null
+++ b/pkgs/default.nix
@@ -0,0 +1,5 @@
+{
+ pkgs ? (import ../nixpkgs.nix) { }
+}: {
+
+}
diff --git a/secrets/common.yaml b/secrets/common.yaml
new file mode 100644
index 0000000..c804f6f
--- /dev/null
+++ b/secrets/common.yaml
@@ -0,0 +1,99 @@
+valinor:
+ ssh_priv: ENC[AES256_GCM,data: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,iv:SnsAMb5Zc7udFyAkdzyVmA04RY7atSUgXrh3/ejWOJA=,tag:R2sQXNWEJTjUl6VAm7f0zQ==,type:str]
+ ssh_pub: ENC[AES256_GCM,data:eGVgIOpwFvbkiIcCwFKkMz0SjJpDaEP4W3y/+8aPCCNfONu8aOqySZwXJcAhk4zvbm0UrdafVdoN969ng7j7MITTPiszX0aFnb0hxt6dD3SEtcL10k/pbTEtzWkhCmvRIoQqTsc/EobPsFv7UHd7bIPMzUFK8YTU31QIMDt7mMWXZZRqNKVj6/sFtN1RKs9J5lbrb1Xv2Etm9pgXn4zaEOAtqv5yaI5Vrvw8dOkULRGUKyWC+r0QEpL4MuZUAdgYGFPRqQJsgHocsuK6YWRW147KCIknyOV5isr1giF/Hc4PSXdFH49kjMs09iqzl0hOlQV+8ZAgsPsibbiGeFtyAES+eiRIX2Vqila+EHTxOBAClUMQQwj20ka9+GpX4+MkFm430tNHwx+nojGrQd+fYWpEk9gNvS4quBTw04ItNc6wmVdzUgPHnoDrJ7HRWtCno3M1APOMcd3p+2hZUzEa/S8IH8S7OuGrJduMBeC2fBBuCDSBlRHSt78vwsavKlgH0Ov8vvZGmzV6ovptpgbUh8CvnOmARE4QPZD1y3zI0dkEzvhErRnPmUP2VgBg5zxYLsuBn4/aUnn9hVkYixFKFnYgWnjvI9Q0pumngS4Adpy7tcXGI7x2kt6LfrBWCNxGHrik1tW06DaOvYNh7R23v9c6rjCJkNke1wr4sxtK0Oofv4iiQ+P7W5NDQ20Wp1JrZM7mXn08eQumBbTeqA/mzPv6GSvVoI3fjgY+obwGsqfPuyTDUg==,iv:FUw0JFi8q3zh/lidid2LtsHWIu6xp6jkx13tASZGsUM=,tag:AQ5flTisdK+LNn4o8m6BgQ==,type:str]
+ wg_priv: ENC[AES256_GCM,data:Efa8WoGN4uiYmi/AWjBZ6AeSDvBWhyzhxscEWvsvPFkGeF965Lfe9MH+E4A=,iv:OBPQkCLw2GJHiGqW55yAc5TisDqqedR+SOvWsHpG3nw=,tag:wy3QUVXMAb9rd688YflLHQ==,type:str]
+ wg_pub: ENC[AES256_GCM,data:vMnudRQwK/McxW6Cx4yCbFSswI+YxBbD64eapo03YgHhWd0RyjDVDRB9fc0=,iv:Hf3jIYKfRxeicGlZNu9F4CEztXNrzu1/uGEDj5lMuFE=,tag:DaM+zEcgED4OoJbYtuokNA==,type:str]
+iriy:
+ ssh_priv: ENC[AES256_GCM,data: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,iv:QknKQ5YhdvAwAN8sWpoJdvFWPuglKMWIejjp7pKbO0M=,tag:QA/1fHCDRWAi8LXK6bNmSA==,type:str]
+ ssh_pub: ENC[AES256_GCM,data:1sNjn80xHTDC2t41hrlA+tdFRK24g/5N1Qv03MK/8BDeRdb/0+gfupgqM2UxooOWVZSnJiDyzJmB4PTc7XqdSZFMIxV7n+2ClzXKgdACkx/XMNKMw+LWnfkNlTvCZq5Iwf79XSdU9FeU3I6i4TpPwGxnvSZek3s2lOQxK9tjyKR/jcvrWHQT3ifqvTe0asDc9LUX0vSVNsZ0ogb9F6Ro4qLmFA6gv380HJmxxqpNVg1eTG2GoBvTXbC1Mxdx5IE4IGXCwyGKmAiNCOC4Ulo7lMZPTys6v1PfPtltv6ZURHjb7c6yMDZRgkSV96tzEUDX2BjE6ePkg5NoCKw/Kl5oB6eR9vgXP3PDbDLxmKPQOq3yLVAzRnJkFxzmp1CRBrNVusK3+weGHj8yBhRye2vCqMOm6UYyrNzNAvsaFXlCd4+k8LwYotu1h9HKTAdTlRbaXnA/6xpjXBsQGBWeQEUCSE7IaFctrd6nQvCgapKWFLKW5Xx6DikXlCxNdCAhT09farQWxUZCcGTEwyCBZnsvGOCCCK6ysbHGlATzDZA8y9T/XuiMWwM1fAn9OuW8yFry0VXslkGY5lHWrJbyt/++BKNQ2Ggfb2tveD9TKMBw3mpF0+HoyJstc6h6qWPH8K5BCPGUMDhv3GDtuIMAEH4Di2uWiZ1lfTuJvVGYALPT6Ucyhrv7CJQzWb2/9aU+8VzZ9xgtdn7nUuBsBBo/Dhzt5yO8Wv+yb7MxIzDRp5UoG2Pt2w==,iv:MtlwecvugOiKmtljWXnqGtFtKnOkimr4xUnTSpVl9BA=,tag:WZHERKFs76Nn2jWaylGYZg==,type:str]
+ wg_priv: ENC[AES256_GCM,data:o5MSalK0soV97DP/N2tRtEsCP2xnl2rshQeH3GrGHI+BKdhCNgyTy6qhEuo=,iv:JHWGDTCGiaQ5Ga0QpJuSr51w1eZaPBhUbwAGM9fyJZs=,tag:d2zjaFwJmMc/F/Hy36sWTQ==,type:str]
+ wg_pub: ENC[AES256_GCM,data:hdi8Bu28WBUSR8gfV0/XivcbSto+AYakdRKayVCdtWb2LJ/DmZX+Whxmy6I=,iv:FPQx6AMTnwbbgUzO/+I/XnMxyTug0HtyhKCUWtDmvao=,tag:yTHpt79FXyAJQLt9IWOitA==,type:str]
+avalon:
+ ssh_priv: ENC[AES256_GCM,data:X9UvG/E=,iv:OdiEGSSB31scuuOxLdys9n0viToYgMAa7BiGfPq3tQ4=,tag:2KWV3kykNskG0zPx+4AwCQ==,type:bool]
+ ssh_pub: ENC[AES256_GCM,data:5tbkQ5Y=,iv:3wiCFT8I1AzbIBsvWY6S8KfHHfb8p+T94h9f4IOMm7M=,tag:IoIoAdQnSQVDc80rhRd/3w==,type:bool]
+ wg_priv: ENC[AES256_GCM,data:qD233z7q6liy387YcyV/khBb2kEu+0TsGOt61l1ck9YCTEqShg8yPsRQcuI=,iv:V8ZgOu9BmsXCbA4ZeAiIp41b8apS/ZAbNBXXTxFM7k0=,tag:CeQejMzMYZ9a6mJjF7oo0g==,type:str]
+ wg_pub: ENC[AES256_GCM,data:dPEGM6CF8J2f8XSTbIwrwH1ywuirHenhnyUugYylzDUCq3OTPIBcNg2dzPw=,iv:QbNlIrmoMZ8G9Mv7M2p2X1KGfuy7rWrF814mkYkQBhk=,tag:RhYHKQ8r2C8QTZKzIU/VHA==,type:str]
+asgard:
+ ssh_priv: ENC[AES256_GCM,data:SOWQflI=,iv:yi3xuOVIcBcD6COo1ckeER203A7mb23XzBuGHJPa7IM=,tag:AbAgPoWT3zs+MS7kId8qrg==,type:bool]
+ ssh_pub: ENC[AES256_GCM,data:0qhBg8s=,iv:f+bqM3HVXPj2jm5QR/GjY2iBklx3ak0Cvxo6WufBJR0=,tag:3um1YyveV618ErVxoMvszQ==,type:bool]
+ wg_priv: ENC[AES256_GCM,data:iDRBcZk=,iv:DQc0gJWNV0Dn/2v0xQPq2T6ddEQyrqLO3aOLEu3kc2o=,tag:Ul8PMJVLbqfAufQC/hdahA==,type:bool]
+ wg_pub: ENC[AES256_GCM,data:wFg0fE8=,iv:Eznu3ZD1XBv/lHErz5sqwrHyjPXoNoCDvPy2pL+EpFQ=,tag:uvbP6Df6LYs7w2zSYVjkxA==,type:bool]
+efir:
+ ssh_priv: ENC[AES256_GCM,data:MtASp6w=,iv:Xh8WyYAM4nGI5rEuKlM+Te+72ZqJBy7rwu5QoWPiYM8=,tag:CpVVXhyseTSb/Dc22zNR9w==,type:bool]
+ ssh_pub: ENC[AES256_GCM,data:9Lg+vuI=,iv:Udu6vKjiIwu9/B0Og3e8/xgmIko7RNj4qQXXDV4mcP4=,tag:0p2SjvWzdMRyRJFrdHCU5Q==,type:bool]
+ wg_priv: ENC[AES256_GCM,data:QUgL+GM=,iv:IQ1dL89QLadfrbk7wjk/sumMzZgPjszP2T6ZTMhxzdA=,tag:gvmQTltLj1eJ5hpvXNn+fw==,type:bool]
+ wg_pub: ENC[AES256_GCM,data:7oVSu1A=,iv:NpI3Qtmg5TlR9rgfPAAsOuCgwKsbmW0jPFu+CDyVkto=,tag:LKfd851YBw3+z6gJvhGH3A==,type:bool]
+vpn:
+ ssh_priv: ENC[AES256_GCM,data:zqJpiiA=,iv:9Dr385BGvVc0Cxg0NhDBT3eitWEkulvWijio6aXWVG8=,tag:VHDJse8vW65Fbyg781ntaA==,type:bool]
+ ssh_pub: ENC[AES256_GCM,data:DJt2Xps=,iv:eQL8ajS+VmkcUFrKWnFQJiJ4Epho9Fwh31jUDxsp3wQ=,tag:JVKK5ImeMZFYcvXkLb/V5A==,type:bool]
+ wg_priv: ENC[AES256_GCM,data:3P/zNE7bgTxcPOhRB28AkUBdxjBTwXaZn/95+VaNsmQMJEwMRbyFIBHzlH4=,iv:vXbtcJKbCeIcuu3p+fOQi5sv6fErDL/lnd5e9A+qJeg=,tag:pFKOIQng/GoVFUxugOdnuw==,type:str]
+ wg_pub: ENC[AES256_GCM,data:11+eBb0Xjj2N/PK2Ikk2n4R3tRe6fO0B2jjpTVurXXQFRYLhzgxsGTjTCTQ=,iv:t2z0OZE00W46Z7V7FllLYehmDoE/JQYZCg5/fuOjs5o=,tag:6DGkJ1eKDN/EMXBZML/Frg==,type:str]
+pgp_key: ENC[AES256_GCM,data:nEMur/Uq,iv:2KXW/AAAWDX09Ich2S6LQ7618ZBAY61KZcGkIabqCLs=,tag:Q7o8fz3dFFuqeMpzu9U/Fg==,type:str]
+wifi: ENC[AES256_GCM,data:NGhBgs21MpS6bPBpdglyCpImXeJcrF7vxZ3xzB035cvNlrJIMhsvV0Am2cN5CsFm4Ui8Xiv7JZlLQsZcL4Xsv/KPyVmuAW7Ka+N+jVCKTyMHhafUy0NFkYCCfKYldZG2l5nSHjcSgOx0G2CcKa1IcqgC1uZg/tNREavRI4ZV8jxM3RrABS9XtDJ9/TTewQ7kKcqaNSkHzk31tSHDr1xs+38O2egROqIQ69IFY7nLmVS7e5SON9gQvd4c3bKH+1S3C+PtFu5tXYTruWRnIdrdH5i021tJvvNcfAMCOiXpsA+lBuM+JRpHhX2Xd3hSvmfxM11/NncCz/7dd1B/aynSsOCK0geZhYvobaCR8f9EU0BCPC9w5nklUHlpIjPrH3dC77JJBjzH9qn8zy38WVxxOTEQdMec5tLS83YFTq6bWCB7z87+bQPZ0KeQIAWRvTbZtMXeVoVdCrEy40I=,iv:BCUax2rnYGVomHRzi+Uqj5LMBIKngpsEsVBpK1CKLXA=,tag:43EkxXbw0Y8HvbUz0/g3tg==,type:str]
+sops:
+ kms: []
+ gcp_kms: []
+ azure_kv: []
+ hc_vault: []
+ age:
+ - recipient: age1sxzuhh2fcd4pmaz4mdqq95t683d32ft22w9t2r7pk258u0s8wymsqdj7lg
+ enc: |
+ -----BEGIN AGE ENCRYPTED FILE-----
+ YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBraWFDRFUxQ2l5OWV1OXNK
+ UExEbWZkM0kzVk1rZG4yY3pBLzdMVWVJS0UwCnhlWFJ5T2lZUXJyNkg1ejQxaU1t
+ L3F2RUhldTY3N2xXL0hwczNKRzNjcncKLS0tIEkycHoxcDBGNyt2V3RDY29wNGVp
+ TGg5Rk05VkRsaXM1Q0NxMmtMajRORDAKqjFldiAYJKjmnkeDkwanjYvhL6645DZ5
+ dVXExjqO/DG733ge8HFyKzpfpkzRymV1giUwxBdII1dd0mJ2ncINeA==
+ -----END AGE ENCRYPTED FILE-----
+ - recipient: age1ms8f0ysv6vakxepvt69fejczs6tddexepesdv4rkgtheehj3nu4sc6290s
+ enc: |
+ -----BEGIN AGE ENCRYPTED FILE-----
+ YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB3UkRjblIvYStZUzQyRHA1
+ ZGVXeHhrN0kyVkxZdms5U3gwVFlPMW12MVJjCjRkVURpZXBzb0tYenB4dGxKamh6
+ VXVBMmo1Ujkvd2VTRExyWE5MbVJaclUKLS0tIDVhRkYzZmEzUG00Q2IwOWZUMVVt
+ ODVIbytpcjN1cVMyaG1qVVdkRmtaMzQKNsvD9DpK/raDBob+IcuNk72tQDts36kJ
+ QhtoLy8MvUymi49PdEWrgyf68w5XwRO/U4iINhR0qzm0glg/XcyHjA==
+ -----END AGE ENCRYPTED FILE-----
+ - recipient: age1sxzuhh2fcd4pmaz4mdqq95t683d32ft22w9t2r7pk258u0s8wymsqdj7lg
+ enc: |
+ -----BEGIN AGE ENCRYPTED FILE-----
+ YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBJc3hKWkk3ckNOY2UyTVhG
+ MmtLaEd0K04yaGxiOUoxMXkzOEFnYis4VkhnCktDRFM2bS8vb05OWDdwa0RwRlNO
+ cmlZemtxVGZ6S0tNTDV1cmE1N0pVWnMKLS0tIE9EZllycHJpcEY2R1pwOFhOZEU3
+ L01IcytDd3BPb0VOTW9DQ2lUdUVJS0kKiD+C+3mK1b/eIwCEFanFgYGLNk3JNPQ7
+ i1UqzbHVxSd0q/YVwdKAcj0jA6EezGm275tgq7IVsy2sHkvRMaEDtQ==
+ -----END AGE ENCRYPTED FILE-----
+ - recipient: age1sxzuhh2fcd4pmaz4mdqq95t683d32ft22w9t2r7pk258u0s8wymsqdj7lg
+ enc: |
+ -----BEGIN AGE ENCRYPTED FILE-----
+ YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAweVU3TkxFZzRnd2I2clN2
+ ZTlTWmhwQkhVc1hnOXFvZVVDSWpHMVh1TGtrCkc3M1pUTnZCMHpvYXB5ZVhreGxa
+ ZVY2cG5Ja2ltL3k2Q1VEalc5TTNFMXcKLS0tIGd5UWl0RGVXT211Zm51dlB6WFZ1
+ STRtTVpVTCtVZ1FUNENqWFFVNTNuaVUKN6HRiZjTdENeif8dJ29urBxPXDaosjjY
+ InN4Ko6YUaGfvB1DTrKIzrxOpsHS+XjisoGfT71tJwwEOoREklEO/A==
+ -----END AGE ENCRYPTED FILE-----
+ lastmodified: "2023-05-20T21:49:09Z"
+ mac: ENC[AES256_GCM,data:GTOFEY+FNcXsXA9yu8ZcjjUbQgyuu2Q0tVVVQyFnrr07M13MM/qv05et2aTXlJZ1q43bLMHSms8mLyEBdODDrtwYhWvJkltzlo77jecCPsDJABpIkLBmEk2aDqDZZRo/6Fn0NzX9RzmN+jXqnFIplBGcm1wuXDCVuto9D/DJfzo=,iv:euRhFT7sCIOwQN/hBpjuWU9Wjgn8wSimmeNYZWo8JF0=,tag:mHWefLoHKIg51T029Szp7w==,type:str]
+ pgp:
+ - created_at: "2023-04-20T10:20:17Z"
+ enc: |-
+ -----BEGIN PGP MESSAGE-----
+
+ wcFMA6R3Y9nD7qMBAQ/8CVWQaYKfOzvPIllZyyWpUjHRLLXaR8MNJ8U5WI/tdwdN
+ 9UScDYJFuYRW7Q9s4Mt961kBGpaHqe9MUZBxUDlYX59+EN3FbO/eMQ5OqI05ESmL
+ TvZB4+S9C5o73nuypSDNvYz+Lgq6DO25ZPhXdtPhx2DE4G31/wft/LpxhjalIjI8
+ MU0Dv22R4qC+glJbe4GIF2IJ8XoxnnzjiGeSqiyv0QIBM0SzOtA5sKwNohWBnW7g
+ 7vxOTm5+kyzG0dDjt3tFApgPDaA1wjofzhRuuveF52VBsuIA2opFdpqkyICvK6rn
+ NB5kUaPlY6A0m+n0oHSfY5wm/AnHNE4Oob/ifumAaB0EAJVUTRauI5M8SeJF0ya1
+ U0IQ9N2lb7Y6q4pqHywIa6fnylsqCfxInAYKMuslRq8f9t/qakb4/MYcnPrwpzjw
+ 73/naiNoJmG6NVTkM52qTtOqZAmsaQd5cigTuPW2Z2CJq1yLZEVGSSd1DUGUjBDK
+ nQGucpVVVpD+ifrIPz+Iqwy+5NoZZm/Oa9pKJGFzqXinnDNZaqtgpmTw9QxcSeaP
+ VvGZG9CDd89MtAm1VQyuqi1bQ2faq3G0xNrLl7xUsfmjx4ofW+JXR87OzvGfLPhu
+ Sjl3kS9j5/MEBRBg3n9gNkgSu5Sy3ilhckY3yjTgAT9Gw2giDhCiUXi1/7KrGprS
+ UQHPCSsjyWsyuYVa3lAP/WPdVclc4WOdfYcetUCXBVP7LQr0bq+IG+2J0nnY3mDt
+ Va5k4sP1qu6Ecrs2JioQ1V2H+VmcrRykBWnMXl1tDSWKMA==
+ =pS8X
+ -----END PGP MESSAGE-----
+ fp: 4E241635F8EDD2919D2FB44CA362EA0491E2EEA0
+ unencrypted_suffix: _unencrypted
+ version: 3.7.3