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:A22Q1y06aEpBE9otRCowanxi8FLcIPEEZBT63R+wH6ASas0t13grdwdmrVojBeVma5SNlQPzz3DFk/OonK2kS8ow/LFTn7FgL9CE6uQPK733PVE8LhtMIqday2XC/chrDduY8WG7tPdMmwoHfmcq+jsT3nv2CKTH4uPBBWlxXAN2YAv9XrBTsowQ8nNgC9NPJS+1KX5xABo8im92vr6sOUSpNqRYy6H76Uar3C96asEcQ1oJRK5tjxGuO98m54y2gFhymPcVnurUfOEqGR6jAJeIYGneqyBHNAPw9dBgJagdBWmz2HqZi1sYx5paGBpxr/Zjcif27u2k6PF1aCrFKjjfzGglhgCmqjKXyUlmqsxPWGLy5qCfN1MWIWvhfMAqEm71Py82tm0t+Pn/TLJMjOBgPeOYvEGZwFDoah4eiGQTfU/kZKvwkB1ys6zLKzZ47WuNu+8+Ps/uS1VsJxGCm3scqSArVDu8t79/Ry5BxQcJXdR917jzfd5rGKdtJFP9JhhkXahmI9Xx2JWbPBYsWPLjtp+D1Aho61qgRVGADmhLlVLpDEd66ONog0b1xO2ypJVKpWMXWEV33DfDQ7sJBCf7Q30aDL/QmSmsdYaQkAQDD7qdl5VXKj7ZkApX16rJxx1nTQMiUvVlnd+PXLQLGFj93XjbbRl+dLwGdE03VmWVA+qg9G3LgS7WVyFQvShRifM0VKXAGK71iSqrRwpHz6j1lZCDLbd1eZzNOb8GUwpke1Re4TftlrmdFX01QaVWju2E6oBHPkivvBhITryYNQJSwiGOo3D/pbBMmS6pIRB5dl3s8yYe25N34fgvDj7dewEUjQOJQCgHp12Eb+sBA8Y919UwGGP/rEIoJw81j+gg+zwHJn4zTrMNyr+/NfnugIlyrN1Ad1oKf38GDdHCnFdPr0kz5+WK/tBzHca8PIraP5FlIK6AK9zgI1vY66mKetIQv9yIBSiDmC/I7x1amnmf0z6sNnbjAqGJAYx/LUBdcC8o4XGG66+Xnkye9m/5gzSUfynbzQ6QRIaCv2T6I0XPU26pPfCFmWGcLkpxPvsaidGJkbAURQg1stebzVMmvoWK9J0J2HsHVeP19aE636lkD5ZYCqwjjKoS+FhKwBWUL7WlL94GCloiUUnoI8rMaWKjwFK0Ec2TooNbV0Qriowlx1wfaF94VDSU7IweP0r31Hzu9rUStD84kcSFuWZKEPSaoK2UYbJ/32vL/3/0tRrFZLiunrtlTYh40JpMYFn3+wiihHTMPTKccWx0/tpDxcziLLLZC22Dt1D4W9mjKcRs8iSuDn6A5zQNWTiypSJ/LPd9Re9UzPZMpxuj6cn0txA/jjujEHRjRgEBxRVCle3BAOHP+gVYvLYXD4TvkNMeyYnpBIxQVNDhKCe3M869vZq6+IC+zA+CkyapDDF8VSWQenyAnPpvQmFTSb0/cwG7WCq8hayrWs7dRF1lcAAY+AW+aHpG+mZatGTaIxbE9s4uyU4tAorqD8VznjLzQGglv8eR5cmdZ+NzjFgiMG9Q5Z9l+4J6lSLUSxqMMjt0quxnxK5DvOgWa32L1BgiOI4y241sJnuDn1/44Hl8dm7IVl+1u/bFrfWErxm4R2AQzUpdFyTYtHgPevVx78Sxl+qk8QO/7k76X5A0sVbQG0K12MohWP4y1NwzFXVfb1wms9Vkct9ui3+HUD/0TMhP+QV3zLWdB+VfJD3bHjxPYbeLZw7oeFsNLihV4PoIPWjDeRvwgH1QC+wKrMPKRmbgKGsaP3iC+bjoHZhxQlRaum3ZyzkxDFV4P1ClwkWTM6pq0yT+nX2Ltsy6Vpg4ThB3G8YHeWY9gJKrUEEH9mBwVzw+2qZYktgrjYLMLqJiIhrsN5Rmg5jMLCqDrtHAHOIxzcoKjWZdLvVy0nvrdTyjoMCqwXnS74iCq7oPzkLTxFz/82lCywoxqvSF0wQJt081qyxAcoKueKrOJW+mwvxl9rOXEoKVCVFKKRutunfALObkAY1+9FUe3IcuxxLlfzlVP0PsuqnYM8dWN7Wp2TPgb8baRNNeK+wdvWCza0626Mn925KNyXiQQh+zh93W0jm9hKCycwR9TxqD64stdQuId7KjCLuEIEECozQ9r8ItMrRVnNpQpLaykVcLKijEaeCgSPA9fqvus6X8C37XG1VxDSKdr0a80cnBybJCQ8ziwadBahQRy/vILbRK7i4noVceY1O9cfjJR9jwEoav3pcl6RIbiSyiNy1hGua4amR7wAk2+qeMzscO3sMisEFgBh9P7HEWqxM6ok96Rcw/C3tB6inIsR6VJ4vkR0w8K0kcvXyMLhbdqrkga1fHYVZRUeB3wQjVkG/6VFLdFLQKeV0Ug1qFbeJDMzngfR6gDs9Gi/zLM0dnXczFwUiI7lodq34Xxgcma1nMWMx/KLcwLgZoa/jXh1wksYSbAWhvpuFUShl3Ua9PpLLvMEh8UUIg4NR6jUeT6a+cUYVSYci1vKMvuveILVooXR0f3kKlsJvHlAm2gbNT9K4J3C4OIivxC87fx1BuQfEix41mbH6nBMLMbERRKSIJriV3DH1UtCGM4lWL7dWBqR1qzx31Rd8b/rHOydTHvUXImmbprdfl+Jv6xy9pAosBhBu22jMuEJXbMYkdchXBMZhqleMoBetAvkw1xVuyOTeDoYE1xkWOeK4N+JKOm20vcCvLeUIWyepdwPPa0jPeKlw6e/sh9ZGXY6YZVfBvQzlKN3zjb6QICZ5pP3McmsOG0NZR8etK/fjoMQiBOWSFu/CKiM2w05ewUQ3q3tVzV3KOqaLS98xEkydGSFMwuNKc0HcymQO1vceR+Kei7vmuWZU70eviWQVxLiP6EojSc3b9TEMusTaZYDVwfgBdeRQ1a+4eEyuINyL6aQO+pKbdi5coBWTsx+cNgFYE+WXljh/CovC9JQFBwJOTK45/qjuUbSswTKjFfP7m/3GkT/RhSa9MtVdmRux++p7EQmoU5J9Chi7j8yQzW/14IOag5xCWx4sAXyCck/SvuOc61IHoXvQBP3jH3VHeMRTj6ZKcahJFgCEVX0vGqul23AV46/8STjAN0b5L9BNpnxToN3f3Kusy0XdDrzB550OIOrZqkr9p2CD7O0RAF/a/rWfTy7aZR0+Z1TY60danL/FWMszlmR98+R8qQE7BQSYKRng2bbkfU2hpqnCSZvJmIhw7VTFWmRE2BxOGCO4tY+CeV69c+eaS4pXUITdjs+hswVfk2/76PpjqkN2SnrRSm1zJsUpdrek6jUXSGtqBqKAgeAMoHtbvefqtbkNQJ/AMkxe7Xz3vRpNLG3XFj2OqAN4c/nUG/2GAaSU8qvbWPBOyWdXuIKyQ/skaQEeUEFcAtsO9IbHORgjm87uL+UfCZ+uqx9sNbqtteAzMn3X3ss+JGGTkN/rdeeg1yrCeeGrmiRFmK3fGM8DLilkkAGBwIiHsI5Wifi921tH8xA==,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