diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100755 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 100755 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 100755 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 100755 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 100755 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 100755 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 100755 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 100755 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..4a07481 --- /dev/null +++ b/flake.lock @@ -0,0 +1,332 @@ +{ + "nodes": { + "base16-schemes": { + "flake": false, + "locked": { + "lastModified": 1689473676, + "narHash": "sha256-L0RhUr9+W5EPWBpLcmkKpUeCEWRs/kLzVMF3Vao2ZU0=", + "owner": "tinted-theming", + "repo": "base16-schemes", + "rev": "d95123ca6377cd849cfdce92c0a24406b0c6a789", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "base16-schemes", + "type": "github" + } + }, + "darwin": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1696360011, + "narHash": "sha256-HpPv27qMuPou4acXcZ8Klm7Zt0Elv9dgDvSJaomWb9Y=", + "owner": "lnl7", + "repo": "nix-darwin", + "rev": "8b6ea26d5d2e8359d06278364f41fbc4b903b28a", + "type": "github" + }, + "original": { + "owner": "lnl7", + "ref": "master", + "repo": "nix-darwin", + "type": "github" + } + }, + "hardware": { + "locked": { + "lastModified": 1697100850, + "narHash": "sha256-qSAzJVzNRIo+r3kBjL8TcpJctcgcHlnZyqdzpWgtg0M=", + "owner": "nixos", + "repo": "nixos-hardware", + "rev": "fb6af288f6cf0f00d3af60cf9d5110433b954565", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixos-hardware", + "type": "github" + } + }, + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1696940889, + "narHash": "sha256-p2Wic74A1tZpFcld1wSEbFQQbrZ/tPDuLieCnspamQo=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "6bba64781e4b7c1f91a733583defbd3e46b49408", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "hyprland": { + "inputs": { + "hyprland-protocols": "hyprland-protocols", + "nixpkgs": "nixpkgs", + "systems": "systems", + "wlroots": "wlroots", + "xdph": "xdph" + }, + "locked": { + "lastModified": 1697059673, + "narHash": "sha256-9dIM1ei+O6zcFFM0pgmBhbHv83tli2y8ikjKb1phouc=", + "owner": "hyprwm", + "repo": "Hyprland", + "rev": "06cc42441cd5b24444f7c79495851dedde8bc732", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "Hyprland", + "type": "github" + } + }, + "hyprland-protocols": { + "inputs": { + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1691753796, + "narHash": "sha256-zOEwiWoXk3j3+EoF3ySUJmberFewWlagvewDRuWYAso=", + "owner": "hyprwm", + "repo": "hyprland-protocols", + "rev": "0c2ce70625cb30aef199cb388f99e19a61a6ce03", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprland-protocols", + "type": "github" + } + }, + "nix-colors": { + "inputs": { + "base16-schemes": "base16-schemes", + "nixpkgs-lib": "nixpkgs-lib" + }, + "locked": { + "lastModified": 1695388192, + "narHash": "sha256-2jelpE7xK+4M7jZNyWL7QYOYegQLYBDQS5bvdo8XRUQ=", + "owner": "misterio77", + "repo": "nix-colors", + "rev": "37227f274b34a3b51649166deb94ce7fec2c6a4c", + "type": "github" + }, + "original": { + "owner": "misterio77", + "repo": "nix-colors", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1694767346, + "narHash": "sha256-5uH27SiVFUwsTsqC5rs3kS7pBoNhtoy9QfTP9BmknGk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ace5093e36ab1e95cb9463863491bee90d5a4183", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib": { + "locked": { + "lastModified": 1694911725, + "narHash": "sha256-8YqI+YU1DGclEjHsnrrGfqsQg3Wyga1DfTbJrN3Ud0c=", + "owner": "nix-community", + "repo": "nixpkgs.lib", + "rev": "819180647f428a3826bfc917a54449da1e532ce0", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixpkgs.lib", + "type": "github" + } + }, + "nixpkgs-stable": { + "locked": { + "lastModified": 1696717752, + "narHash": "sha256-qEq1styCyQHSrw7AOhskH2qwCFx93bOwsGEzUIrZC0g=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "2f3b6b3fcd9fa0a4e6b544180c058a70890a7cc1", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "release-23.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1696879762, + "narHash": "sha256-Ud6bH4DMcYHUDKavNMxAhcIpDGgHMyL/yaDEAVSImQY=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "f99e5f03cc0aa231ab5950a15ed02afec45ed51a", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1696693680, + "narHash": "sha256-PH0HQTkqyj7DmdPKPwrrXwVURLBqzZs4nqnDw9q8mhg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "945559664c1dc5836173ee12896ba421d9b37181", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nur": { + "locked": { + "lastModified": 1697118309, + "narHash": "sha256-7kr8JD4Sa54jGnJz1AFjE6bFnzy4KMFsRdPvhQa0ESE=", + "owner": "nix-community", + "repo": "nur", + "rev": "8a488b2668191da034e571d0b015117ce47e1ae6", + "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": 1697064251, + "narHash": "sha256-xxp2sB+4vqB6S6zC/L5J8LlRKgVbgIZOcYl9/TDrEzI=", + "owner": "Mic92", + "repo": "sops-nix", + "rev": "f995ea159252a53b25fa99824f2891e3b479d511", + "type": "github" + }, + "original": { + "owner": "Mic92", + "repo": "sops-nix", + "type": "github" + } + }, + "systems": { + "locked": { + "lastModified": 1689347949, + "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", + "owner": "nix-systems", + "repo": "default-linux", + "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default-linux", + "type": "github" + } + }, + "wlroots": { + "flake": false, + "locked": { + "host": "gitlab.freedesktop.org", + "lastModified": 1696410538, + "narHash": "sha256-ecDhdYLXWHsxMv+EWG36mCNDvzRbu9qfjH7dLxL7aGM=", + "owner": "wlroots", + "repo": "wlroots", + "rev": "3406c1b17a4a7e6d4e2a7d9c1176affa72bce1bc", + "type": "gitlab" + }, + "original": { + "host": "gitlab.freedesktop.org", + "owner": "wlroots", + "repo": "wlroots", + "rev": "3406c1b17a4a7e6d4e2a7d9c1176affa72bce1bc", + "type": "gitlab" + } + }, + "xdph": { + "inputs": { + "hyprland-protocols": [ + "hyprland", + "hyprland-protocols" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1694628480, + "narHash": "sha256-Qg9hstRw0pvjGu5hStkr2UX1D73RYcQ9Ns/KnZMIm9w=", + "owner": "hyprwm", + "repo": "xdg-desktop-portal-hyprland", + "rev": "8f45a6435069b9e24ebd3160eda736d7a391cbf2", + "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..fb74933 --- /dev/null +++ b/flake.nix @@ -0,0 +1,107 @@ +{ + 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"; + 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 + gen = import ./generator.nix { inherit inputs nixpkgs home-manager darwin sops-nix hyprland nix-colors; }; + forEachSystem = nixpkgs.lib.genAttrs [ "aarch64-linux" "x86_64-linux" ]; + + in { + + devShells = forEachSystem (system: + let + overlays = import ./pkgs/overlay.nix { inherit pkgs; }; + overrides = {custom = import ./pkgs { inherit pkgs; }; }; + pkgs = import nixpkgs { + inherit system overlays ; + } // overrides; + in { + default = import ./modules/devshell.nix { inherit pkgs; }; + } + ); + + 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 = "-"; #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 100755 index 0000000..fa74b20 --- /dev/null +++ b/generator.nix @@ -0,0 +1,53 @@ +{ 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 100755 index 0000000..6a1c5d4 --- /dev/null +++ b/home/cli/default.nix @@ -0,0 +1,21 @@ +{ + pkgs, + ... +}: { + imports = [ + ./git + ./neofetch + ./starship + ./zsh + ./helix + ]; + + 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 100755 index 0000000..e829d9f --- /dev/null +++ b/home/cli/git/default.nix @@ -0,0 +1,23 @@ +{ + pkgs, + ... +}: { + + programs.git = { + enable = true; + userEmail = "soraefir+git@pm.me"; + userName = "soraefir"; + signing = { + key = "4E241635F8EDD2919D2FB44CA362EA0491E2EEA0"; + signByDefault = true; + }; + ignores = ["*result*" ".direnv" "node_modules"]; + extraConfig = { + core.hooksPath = "./.dev/hooks"; + }; + }; + + home.packages = with pkgs; [ + tig + ]; +} \ No newline at end of file diff --git a/home/cli/helix/default.nix b/home/cli/helix/default.nix new file mode 100644 index 0000000..fecf2d3 --- /dev/null +++ b/home/cli/helix/default.nix @@ -0,0 +1,10 @@ +{ + ... +}:{ + programs.helix = { + enable = true; + languages = { }; + settings = { }; + themes = { }; + }; +} \ No newline at end of file diff --git a/home/cli/neofetch/config.conf b/home/cli/neofetch/config.conf new file mode 100755 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 100755 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 100755 index 0000000..eae9512 --- /dev/null +++ b/home/cli/starship/default.nix @@ -0,0 +1,61 @@ +{ + 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})" + "[ ](bg:#${config.colorScheme.colors.base04})" + "$env_var" + "[](bg:#${config.colorScheme.colors.base00} 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" = " "; + }; + env_var = { + variable = "DEVSH"; + default = ""; + style = "bg:#${config.colorScheme.colors.base04} fg:#${config.colorScheme.colors.base00}"; + format = "[$env_value]($style)"; + }; + }; + }; +} \ No newline at end of file diff --git a/home/cli/zsh/default.nix b/home/cli/zsh/default.nix new file mode 100755 index 0000000..f4eb1c2 --- /dev/null +++ b/home/cli/zsh/default.nix @@ -0,0 +1,22 @@ +{ + pkgs, + ... +}: +let + nixflake_dir = "$HOME/files/nixconfig"; +in { + programs.zsh = { + enable = true; + shellAliases = { + "sudo" = "sudo "; + "devsh-dl" = "nix develop --profile /tmp/devsh-env ${nixflake_dir} -c zsh"; + "devsh" = "nix develop --profile /tmp/devsh-env ${nixflake_dir} -c zsh"; + "nixu" = "(cd ${nixflake_dir} && nix flake update)"; + "nixb" = "(cd ${nixflake_dir} && sudo nixos-rebuild switch --flake ./)"; + "nixf" = "sudo echo 'Full Update' && echo 'Update lock' && nixu && echo 'Building new' && nixb && (devsh && exit) "; + "nixgcf" = "sudo nix-collect-garbage -d && nix-collect-garbage -d"; + "ssh" = "TERM=xterm-256color ${pkgs.openssh}/bin/ssh"; + "top" = "btop"; + }; + }; +} diff --git a/home/gui/default.nix b/home/gui/default.nix new file mode 100755 index 0000000..bcdb9a7 --- /dev/null +++ b/home/gui/default.nix @@ -0,0 +1,67 @@ +{ + pkgs, + lib, + inputs, + ... +}: { + imports = [ + ./dunst + ./eww + ./wofi + ./mpv + ./wayland + ./pipewire + + ./theme + + ./firefox + ./zathura + ./kitty + + ./vosk + ./various + ]; + + home.packages = with pkgs; [ + brillo + dunst + libnotify + wofi + btop + 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"]; + + "application/pdf" = ["org.pwmt.zathura-pdf-mupdf.desktop"]; + "text/plain" = ["vscodium.desktop"]; + + "video/mp4" = ["mpv.desktop"]; + + "image/png" = ["imv-dir.desktop"]; + "image/jpg" = ["imv-dir.desktop"]; + }; + associations = { + removed = { + "application/pdf" = ["krita_pdf.desktop"]; + }; + }; + }; +} \ No newline at end of file diff --git a/home/gui/dunst/default.nix b/home/gui/dunst/default.nix new file mode 100755 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 100755 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 100755 index 0000000..a1235a6 --- /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-bar 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, .3); } +} + +.net-connected { + background-color: $base0C; + color: $base00; + + button:hover { background-color: rgba(0, 0, 0, .3); } +} diff --git a/home/gui/eww/css/_system.scss b/home/gui/eww/css/_system.scss new file mode 100755 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/default.nix b/home/gui/eww/default.nix new file mode 100755 index 0000000..a0feab5 --- /dev/null +++ b/home/gui/eww/default.nix @@ -0,0 +1,51 @@ +{ + config, + pkgs, + lib, + ... +}: +{ + + home.packages = with pkgs; [ + eww-wayland + 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 100755 index 0000000..6929d66 --- /dev/null +++ b/home/gui/eww/eww.scss @@ -0,0 +1,109 @@ +@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'; + +.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 100755 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/clock.yuck b/home/gui/eww/modules/clock.yuck new file mode 100755 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 100755 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 100755 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 100755 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/workspaces.yuck b/home/gui/eww/modules/workspaces.yuck new file mode 100755 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..29a369e --- /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..6270197 --- /dev/null +++ b/home/gui/eww/scripts/brightness @@ -0,0 +1,30 @@ +#!/usr/bin/env bash + +function get_time_ms { + date -u +%s%3N +} + +icons=("󰛩" "󱩒" "󰛨") + +gen_output() { + icon="${icons[$(awk -v n="$(brillo)" 'BEGIN{print int(n/34)}')]}" + prcnt=$(brillo | xargs printf "%.*f\n" "0") + echo '{"percent": '$prcnt', "icon": "'$icon'"}' +} + +if [[ $(brillo 2>/dev/stdout 1>/dev/null | head -n1 | awk '{print $1}') == "No" ]]; then + echo '{"percent": 100, "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..dcafe42 --- /dev/null +++ b/home/gui/eww/scripts/volume @@ -0,0 +1,64 @@ +#!/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")'}' +} + +if [ "$1" = "mute" ]; then + if [ "$2" != "SOURCE" ] && [ "$2" != "SINK" ]; then + echo "Can only mute SINK or SOURCE" + exit 1 + fi + setmute "$2" +elif [ "$1" = "setvol" ]; then + 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" +else + last_time=$(get_time_ms) + gen_output + + pw-cli -m 2>/dev/null | 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 +fi 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 100755 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 100755 index 0000000..ef59132 --- /dev/null +++ b/home/gui/eww/windows/system.yuck @@ -0,0 +1,188 @@ +(defwidget system-menu [] + (box + :class "system-menu-box" + :space-evenly false + :orientation "v" + (centerbox + :class "top-row" + (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-bar" + :value {brightness.percent} + :onchange "brillo -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 100755 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 100755 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 100755 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 100755 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/pipewire/default.nix b/home/gui/pipewire/default.nix new file mode 100755 index 0000000..b049123 --- /dev/null +++ b/home/gui/pipewire/default.nix @@ -0,0 +1,31 @@ +{ + ... +}:{ + + xdg.configFile."pipewire/pipewire-pulse.conf.d/desktop.conf".text = '' + context.modules = [ + { name = libpipewire-module-loopback + args = { + node.description = "Desktop" + node.name = "Desktop" + audio.position = [ FL FR ] + capture.props = { + media.class = Audio/Sink + node.name = "Desktop" + } + } + } + { name = libpipewire-module-loopback + args = { + node.description = "Music" + node.name = "Music" + audio.position = [ FL FR ] + capture.props = { + media.class = Audio/Sink + node.name = "Music" + } + } + } + ] + ''; +} \ No newline at end of file diff --git a/home/gui/theme/default.nix b/home/gui/theme/default.nix new file mode 100755 index 0000000..c211a82 --- /dev/null +++ b/home/gui/theme/default.nix @@ -0,0 +1,61 @@ +{ + pkgs, + inputs, + config, + ... +}: +let + colorVariant = " black"; + gtkThemeFromScheme = import ./gtk-theme-gen.nix { inherit pkgs config; }; + wallpaperGen = import ./wallpaper-gen.nix {inherit pkgs config; }; +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; + }; + iconTheme = { + name = "tela-circle-icon-theme"; + package = pkgs.tela-circle-icon-theme; + }; + }; + + qt = { + enable = true; + platformTheme = "gtk"; + }; + + home.packages = [ + wallpaperGen + ]; + + xdg.configFile."script/wallpaper.sh".text = '' +#!/bin/sh + +NIXDIR=${wallpaperGen} +WPDIR=$NIXDIR/share/wallpaper/ + +IMGS=$(find $WPDIR -type f -print) + + +RES=$(echo "$IMGS" | awk -v dir="$WPDIR" '{ + image_file = $0; + gsub("^" dir, "", image_file); + print "img:" $0 ":text:" image_file; +}') + +IMG=$WPDIR/$(echo "$RES" | wofi --dmenu --allow-images show-icons true -theme-str '#window { width: 50%; }' -p "Choose wallpaper:") +IMG=$(echo "$IMG" | awk -F ':' '{print $2}') +swww img $IMG +''; +} diff --git a/home/gui/theme/gtk-theme-gen.nix b/home/gui/theme/gtk-theme-gen.nix new file mode 100755 index 0000000..f08ddc0 --- /dev/null +++ b/home/gui/theme/gtk-theme-gen.nix @@ -0,0 +1,69 @@ +{ pkgs, config }: + +let + rendersvg = pkgs.runCommand "rendersvg" { } '' + mkdir -p $out/bin + ln -s ${pkgs.resvg}/bin/resvg $out/bin/rendersvg + ''; + scheme = config.colorScheme; +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} + HDR_BG=${scheme.colors.base00} + HDR_FG=${scheme.colors.base07} + SEL_BG=${scheme.colors.base03} + SEL_FG=${scheme.colors.base07} + TXT_BG=${scheme.colors.base01} + TXT_FG=${scheme.colors.base07} + BTN_BG=${scheme.colors.base01} + BTN_FG=${scheme.colors.base07} + HDR_BTN_BG=${scheme.colors.base01} + HDR_BTN_FG=${scheme.colors.base07} + MENU_BG=${scheme.colors.base00} + MENU_FG=${scheme.colors.base07} + ACCENT_BG=${scheme.colors.base0C} + ACCENT_FG=${scheme.colors.base00} + MATERIA_SURFACE=${scheme.colors.base01} + MATERIA_VIEW=${scheme.colors.base00} + WM_BORDER_FOCUS=${scheme.colors.base02} + WM_BORDER_UNFOCUS=${scheme.colors.base02} + UNITY_DEFAULT_LAUNCHER_STYLE=False + ROUNDNESS=7 + 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/theme/wallpaper-gen.nix b/home/gui/theme/wallpaper-gen.nix new file mode 100644 index 0000000..6b03693 --- /dev/null +++ b/home/gui/theme/wallpaper-gen.nix @@ -0,0 +1,45 @@ +{ pkgs, config }: + +let + scheme = config.colorScheme; + colors = scheme.colors; + dither = "atkinson"; # none | floyd-steinberg | atkinson | jjn | burkes | sierra | sierra-lite +in +pkgs.stdenv.mkDerivation rec { + pname = "generated-wallpaper"; + version = "a1676fc2a0e3dfb7bf95d8a89e592830"; + src = pkgs.fetchFromGitea { + domain = "git.helcel.net"; + owner = "sora"; + repo = "nixconfig-wallpaper"; + rev = version; + sha256 = "sha256-ZhBjTaKzoiEq1ptMmNWWRPCjLJsvy9My/HuzRaDjX1c="; + }; + + buildInputs = with pkgs; [ + custom.repalette + nodejs + imagemagick + gifsicle + ]; + + configurePhase = '' + echo "${colors.base00},${colors.base01},\ + ${colors.base02},${colors.base03},\ + ${colors.base04},${colors.base05},\ + ${colors.base06},${colors.base07},\ + ${colors.base08},${colors.base09},\ + ${colors.base0A},${colors.base0B},\ + ${colors.base0C},${colors.base0D},\ + ${colors.base0E},${colors.base0F}" > palette.in + ''; + + buildPhase = '' + make DITHER=${dither} PALETTE_SIZE=0 all + ''; + + installPhase = '' + mkdir -p $out/share/wallpaper + cp -r build/* $out/share/wallpaper/ + ''; +} \ No newline at end of file diff --git a/home/gui/various/btop.nix b/home/gui/various/btop.nix new file mode 100644 index 0000000..4787a2d --- /dev/null +++ b/home/gui/various/btop.nix @@ -0,0 +1,92 @@ +{ + config, + ... +}: { + xdg.configFile."btop/themes/${config.colorScheme.slug}.theme".text = '' + +# Theme generated from: ${config.colorScheme.slug} + +# Main background, empty for terminal default, need to be empty if you want transparent background +theme[main_bg]="#${config.colorScheme.colors.base00}" + +# Main text color +theme[main_fg]="#${config.colorScheme.colors.base07}" + +# Title color for boxes +theme[title]="#${config.colorScheme.colors.base07}" + +# Higlight color for keyboard shortcuts +theme[hi_fg]="#${config.colorScheme.colors.base0E}" + +# Background color of selected item in processes box +theme[selected_bg]="#${config.colorScheme.colors.base0C}" + +# Foreground color of selected item in processes box +theme[selected_fg]="#${config.colorScheme.colors.base00}" + +# Color of inactive/disabled text +theme[inactive_fg]="#${config.colorScheme.colors.base02}" + +# Color of text appearing on top of graphs, i.e uptime and current network graph scaling +theme[graph_text]="#${config.colorScheme.colors.base05}" + +# Misc colors for processes box including mini cpu graphs, details memory graph and details status text +theme[proc_misc]="#${config.colorScheme.colors.base0C}" + +# Cpu box outline color +theme[cpu_box]="#${config.colorScheme.colors.base02}" + +# Memory/disks box outline color +theme[mem_box]="#${config.colorScheme.colors.base02}" + +# Net up/down box outline color +theme[net_box]="#${config.colorScheme.colors.base02}" + +# Processes box outline color +theme[proc_box]="#${config.colorScheme.colors.base02}" + +# Box divider line and small boxes line color +theme[div_line]="#${config.colorScheme.colors.base02}" + +# Temperature graph colors +theme[temp_start]="#${config.colorScheme.colors.base0D}" +theme[temp_mid]="" +theme[temp_end]="#${config.colorScheme.colors.base0F}" + +# CPU graph colors +theme[cpu_start]="#${config.colorScheme.colors.base0C}" +theme[cpu_mid]="" +theme[cpu_end]="#${config.colorScheme.colors.base0C}" + +# Mem/Disk free meter +theme[free_start]="#${config.colorScheme.colors.base0A}" +theme[free_mid]="" +theme[free_end]="#${config.colorScheme.colors.base0A}" + +# Mem/Disk cached meter +theme[cached_start]="#${config.colorScheme.colors.base09}" +theme[cached_mid]="" +theme[cached_end]="#${config.colorScheme.colors.base09}" + +# Mem/Disk available meter +theme[available_start]="#${config.colorScheme.colors.base0B}" +theme[available_mid]="" +theme[available_end]="#${config.colorScheme.colors.base0B}" + +# Mem/Disk used meter +theme[used_start]="#${config.colorScheme.colors.base08}" +theme[used_mid]="" +theme[used_end]="#${config.colorScheme.colors.base08}" + +# Download graph colors +theme[download_start]="#${config.colorScheme.colors.base02}" +theme[download_mid]="" +theme[download_end]="#${config.colorScheme.colors.base0D}" + +# Upload graph colors +theme[upload_start]="#${config.colorScheme.colors.base02}" +theme[upload_mid]="" +theme[upload_end]="#${config.colorScheme.colors.base0E}" + + ''; +} \ No newline at end of file diff --git a/home/gui/various/default.nix b/home/gui/various/default.nix new file mode 100755 index 0000000..b053f1d --- /dev/null +++ b/home/gui/various/default.nix @@ -0,0 +1,14 @@ +{ + pkgs, + lib, + inputs, + ... +}: { + imports = [ + ./openttd.nix + ./btop.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 100755 index 0000000..b6390bb --- /dev/null +++ b/home/gui/various/openttd.nix @@ -0,0 +1,769 @@ +{ + 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 = 27 +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 +gui_scale = -1 + +[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 +rail_depot_speed_limit = 61 + +[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 +allow_town_bridges = true +disable_inflation_newgrf_flag = false +payment_algorithm = 1 + +[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 = +units_velocity_nautical = metric + +[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 +zoom_max_extra = 9 +show_cargo_in_vehicle_lists = false +scale_bevels = 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 +remain_if_next_order_same_station = true + +[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.53.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/vosk/default.nix b/home/gui/vosk/default.nix new file mode 100644 index 0000000..8b8683d --- /dev/null +++ b/home/gui/vosk/default.nix @@ -0,0 +1,69 @@ + +{ + pkgs, + lib, + inputs, + ... +}: { + home.packages = with pkgs; [ + custom.vosk + custom.voskcli + custom.vosk-lang.en-us + custom.vosk-lang.ja + custom.vosk-lang.de + custom.vosk-lang.ru + jq + (python3.withPackages(ps: with ps; [ translatepy ])) + ]; + +xdg.configFile."script/transcript-translate.py".text = '' +#!/bin/python + +import sys; +from translatepy.translators.google import GoogleTranslate; + +if len(sys.argv) != 2: + print("No language provided.") + exit +translator = GoogleTranslate() +while True: + for line in sys.stdin: + sys.stdout.write(translator.translate(line,sys.argv[1]).result+"\n") +''; + + xdg.configFile."script/transcript.sh".text = '' +#!/bin/sh + +MODELS=( + "English:${pkgs.custom.vosk-lang.en-us}/usr/share/vosk-models/en-us" + "German:${pkgs.custom.vosk-lang.de}/usr/share/vosk-models/de" + "Russian:${pkgs.custom.vosk-lang.ru}/usr/share/vosk-models/ru" + "Japanese:${pkgs.custom.vosk-lang.ja}/usr/share/vosk-models/ja" +) + +MODEL_OPTS="" +for pair in "''${MODELS[@]}"; do + MODEL_OPTS+="$pair\n" +done + +MODEL_OPT=$(echo -e "$MODEL_OPTS" | wofi --dmenu -p "Choose model:") +MODEL=$(echo "$MODEL_OPT" | awk -F ':' '{print $2}') + +TRANSS="None\nNone-prog\nEnglish\nGerman\nRussian\nJapanese" +TRANS=$(echo -e "$TRANSS" | wofi --dmenu -p "Choose translation:") + +export VOSK_MODEL=$MODEL +case $TRANS in + "None") + voskcli 2>/dev/null | jq --unbuffered -r '.alternatives[0].text // empty | select(length > 0)' 2>/dev/null + ;; + "None-prog") + voskcli 2>/dev/null | jq --unbuffered -r '.alternatives[0].text // empty, .partial // empty | select(length > 0)' 2>/dev/null + ;; + *) + voskcli 2>/dev/null | jq --unbuffered -r '.alternatives[0].text // empty | select(length > 0)' | python ~/.config/script/transcript-translate.py $TRANS + ;; +esac +''; + +} \ No newline at end of file diff --git a/home/gui/wayland/default.nix b/home/gui/wayland/default.nix new file mode 100755 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 100755 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 100755 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 100755 index 0000000..e94aa4c --- /dev/null +++ b/home/wayland/default.nix @@ -0,0 +1,93 @@ +{ + 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 + swappy + cliphist + wl-clipboard + wlogout + wlr-randr + wdisplays + kanshi + glib + ]; + + services.dbus.enable = true; + xdg.portal = { + enable = true; + # wlr.enable = true; + extraPortals = with pkgs; [ + xdg-desktop-portal-hyprland + xdg-desktop-portal + ]; + }; + + 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 100755 index 0000000..6b4e1f0 --- /dev/null +++ b/home/wayland/hyprland/config.nix @@ -0,0 +1,227 @@ +{ + config, + ... +}: { + wayland.windowManager.hyprland.extraConfig = '' + +monitor=,preferred,auto,1 + +input { + kb_layout = us, ru + kb_variant = intl, phonetic + kb_model = pc104 + kb_options = grp:ctrls_toggle + kb_rules = + + follow_mouse = 1 + + sensitivity = 0 # -0.5 # -1.0 - 1.0, 0 means no modification. + force_no_accel = true + + touchpad { + natural_scroll=no + disable_while_typing=true + scroll_factor=1 + disable_while_typing=0 + tap-to-click=0 + } +} + +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 { + enabled = true + size = 2 + passes = 1 + new_optimizations = true + } + #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 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 = float,class:^(firefox)$,title:^(Firefox — Sharing Indicator)$ +windowrulev2 = nofullscreenrequest,class:^(firefox)$,title:^(Firefox — Sharing Indicator)$ +windowrulev2 = float,class:^(firefox)$,title:^(Extension:.* Mozilla Firefox)$ +windowrulev2 = nofullscreenrequest,class:^(firefox)$,title:^(Extension:.* Mozilla Firefox)$ +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)" - | swappy -f - + +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, movetoworkspacesilent, 1 +bind = SUPER SHIFT, 2, movetoworkspacesilent, 2 +bind = SUPER SHIFT, 3, movetoworkspacesilent, 3 +bind = SUPER SHIFT, 4, movetoworkspacesilent, 4 +bind = SUPER SHIFT, 5, movetoworkspacesilent, 5 +bind = SUPER SHIFT, 6, movetoworkspacesilent, 6 +bind = SUPER SHIFT, 7, movetoworkspacesilent, 7 +bind = SUPER SHIFT, 8, movetoworkspacesilent, 8 +bind = SUPER SHIFT, 9, movetoworkspacesilent, 9 +bind = SUPER SHIFT, 0, movetoworkspacesilent, 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, amixer -q sset 'Master' toggle +bind = , XF86MonBrightnessUp, exec, brillo -A 5 +bind = , XF86MonBrightnessDown, exec, brillo -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 +keepassxc & +firefox & +jellyfin-mpv-shim & +easyeffects --gapplication-service & + +sleep 2 +nextcloud & +telegram-desktop& + ''; +} diff --git a/home/wayland/hyprland/default.nix b/home/wayland/hyprland/default.nix new file mode 100755 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 100755 index 0000000..826c80c --- /dev/null +++ b/home/xorg/bspwm/config.nix @@ -0,0 +1,316 @@ +{ + 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 & +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 100755 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 100755 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 100755 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 100755 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 100755 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 100755 index 0000000..126f468 --- /dev/null +++ b/hosts/_/home.nix @@ -0,0 +1,86 @@ +{ + 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; [ + + #lang + #See DEVSH + + #ui + firefox + vscodium + xfce.thunar + xfce.thunar-volman + xfce.thunar-archive-plugin + xfce.tumbler + + # xplorer + telegram-desktop + obs-studio + pavucontrol + unzip + appimage-run + yt-dlp + keepassxc + nextcloud-client + jellyfin-mpv-shim + + #software + godot_4 + krita + gimp + imv + darktable + gramps + custom.simc + + #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 100755 index 0000000..85ff5ac --- /dev/null +++ b/hosts/_/host.nix @@ -0,0 +1,166 @@ +{ + 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 = "intl"; + excludePackages = [ pkgs.xterm ]; + exportConfiguration = true; + # libinput.touchpad.tapping = false; + 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; + }; + + #documentation.nixos.enable = false; + + services.fwupd.enable = true; + + hardware.bluetooth.enable = true; + hardware.brillo.enable = true; + services.blueman.enable = true; + + programs.steam.enable = true; + programs.zsh.enable = true; + programs.adb.enable = true; + + programs.wireshark.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; []; + }; + }; + + modules.battery_monitor.enable = true; + + users = { + defaultUserShell = pkgs.zsh; + users.sora = { + isNormalUser = true; + description = "sora"; + extraGroups = [ "networkmanager" "wheel" "vboxsf" "adbusers" "lp" "audio" "video" "docker" "wireshark"]; + }; + }; + + environment.systemPackages = with pkgs; [ + wget + dconf + gvfs + sops + + polkit_gnome + nfs-utils + bluez + bluez-tools + easyeffects + + jre8 + jdk8 + jdk + ]; + + nix = { + package = pkgs.nixFlakes; + extraOptions = '' + experimental-features = nix-command flakes + warn-dirty = false + keep-outputs = true + keep-derivations = true + ''; + 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; + packageOverrides = pkgs: rec{ + custom = import ../../pkgs { inherit pkgs; }; + }; + }; + nixpkgs.overlays = import ../../pkgs/overlay.nix { inherit pkgs; }; + + system.stateVersion = "23.05"; +} diff --git a/hosts/asgard/default.nix b/hosts/asgard/default.nix new file mode 100755 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 100755 index 0000000..88c3d29 --- /dev/null +++ b/hosts/asgard/home.nix @@ -0,0 +1,14 @@ +{ pkgs, ... }: +{ + home = { + packages = with pkgs; []; + stateVersion = "23.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..5c1dd47 --- /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/32"; + 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..20cdcd1 --- /dev/null +++ b/hosts/iriy/hardware-configuration.nix @@ -0,0 +1,48 @@ +# 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; + # waydroid.enable = true; + # lxd.enable = true; + docker = { + enable = true; + rootless = { + enable = true; + setSocketVariable = 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..1d19ffc --- /dev/null +++ b/hosts/iriy/home.nix @@ -0,0 +1,25 @@ +{config, pkgs, ...}: +{ + + imports = [ + ../_/home.nix + ]; + + services.kanshi = { + enable = true; + systemdTarget = "graphical-session.target"; + profiles = { + default = { + outputs = [ + { + criteria = "CEX CX133 0x00000001"; + mode = "1920x1200@59.972"; + position = "0,0"; + status = "enable"; + } + ]; + }; + }; + }; + +} \ No newline at end of file diff --git a/hosts/valinor/default.nix b/hosts/valinor/default.nix new file mode 100755 index 0000000..500b9e7 --- /dev/null +++ b/hosts/valinor/default.nix @@ -0,0 +1,33 @@ +{ + config, + pkgs, + ... +}: { + imports = + [ + ../_/cfg.nix + ./hardware-configuration.nix + ../_/host.nix + ../../modules/tlp.nix + ]; + + boot.loader = { + systemd-boot = { + enable = true; + configurationLimit = 8; + }; + efi = { + canTouchEfiVariables = true; + efiSysMountPoint = "/boot/efi"; + }; + }; + + hostcfg = { + hostname = "valinor"; + wlp_if = "wlp3s0"; + wg_ip4 = "10.10.1.5/32"; + 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..a1f709f --- /dev/null +++ b/hosts/valinor/hardware-configuration.nix @@ -0,0 +1,56 @@ +# 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; + # waydroid.enable = true; + # lxd.enable = true; + docker = { + enable = true; + rootless = { + enable = true; + setSocketVariable = true; + }; + }; + }; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/e9713f83-ee3a-4fb1-806f-594c3bab7006"; + fsType = "ext4"; + }; + + fileSystems."/boot/efi" = + { device = "/dev/disk/by-uuid/F344-72E2"; + fsType = "vfat"; + }; + + swapDevices = + [ { device = "/dev/disk/by-uuid/8bbeae2f-9431-4849-9b42-9f2655da596e"; } + ]; + + # Enables DHCP on each ethernet and wireless interface. In case of scripted networking + # (the default) this is the recommended approach. When using systemd-networkd it's + # still possible to use this option, but it's recommended to use it in conjunction + # with explicit per-interface declarations with `networking.interfaces..useDHCP`. + networking.useDHCP = lib.mkDefault true; + # networking.interfaces.enp2s0f0.useDHCP = lib.mkDefault true; + # networking.interfaces.enp6s0f3u1u3i5.useDHCP = lib.mkDefault true; + # networking.interfaces.wlp3s0.useDHCP = lib.mkDefault true; + + 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..eb5471b --- /dev/null +++ b/hosts/valinor/home.nix @@ -0,0 +1,41 @@ +{config, pkgs, ...}: +{ + + imports = [ + ../_/home.nix + ]; + + services.kanshi = { + enable = true; + systemdTarget = "graphical-session.target"; + profiles = { + default = { + outputs = [ + { + criteria = "eDP-1"; + mode = "1920x1080@60.020"; + position = "0,0"; + status = "enable"; + } + ]; + }; + d0 = { + outputs = [ + { + criteria = "CEX CX133 0x00000001"; + mode = "2560x1600@59.972"; + position = "0,0"; + status = "enable"; + } + { + criteria = "eDP-1"; + mode = "1920x1080@60.020"; + position = "2560,0"; + status = "enable"; + } + ]; + }; + }; + }; + +} \ No newline at end of file diff --git a/modules/battery_monitor.nix b/modules/battery_monitor.nix new file mode 100644 index 0000000..ad4db26 --- /dev/null +++ b/modules/battery_monitor.nix @@ -0,0 +1,41 @@ +{ config, pkgs, lib, ... }: + + +let conf = config.modules.battery_monitor; + +in { + options.modules.battery_monitor = with lib; { + enable = mkEnableOption "battery_monitor"; + }; + + config = lib.mkIf conf.enable { + # Regularly check battery status + systemd.user.services.battery_monitor = { + wants = [ "display-manager.service" ]; + wantedBy = [ "graphical-session.target" ]; + script = '' + prev_val=100 + check () { [[ $1 -ge $val ]] && [[ $1 -lt $prev_val ]]; } + notify () { + ${pkgs.libnotify}/bin/notify-send -a Battery "$@" \ + -h "int:value:$val" "Discharging" "$val%, $remaining" + } + while true; do + IFS=: read _ bat0 < <(${pkgs.acpi}/bin/acpi -b) + IFS=\ , read status val remaining <<<"$bat0" + val=''${val%\%} + if [[ $status = Discharging ]]; then + echo "$val%, $remaining" + if check 30 || check 25 || check 20; then notify + elif check 15 || [[ $val -le 10 ]]; then notify -u critical + fi + fi + prev_val=$val + # Sleep longer when battery is high to save CPU + if [[ $val -gt 30 ]]; then sleep 10m; elif [[ $val -ge 20 ]]; then sleep 5m; else sleep 1m; fi + done + ''; + }; + + }; +} \ No newline at end of file diff --git a/modules/default.nix b/modules/default.nix new file mode 100755 index 0000000..843bba4 --- /dev/null +++ b/modules/default.nix @@ -0,0 +1,13 @@ +{ + ... +}: { + imports = [ + ./secret.nix + ./security.nix + ./udevd.nix + ./networking.nix + ./fonts.nix + + ./battery_monitor.nix + ]; +} diff --git a/modules/devshell.nix b/modules/devshell.nix new file mode 100644 index 0000000..bb2fc19 --- /dev/null +++ b/modules/devshell.nix @@ -0,0 +1,34 @@ +{ + pkgs, + ... +}: +pkgs.mkShell { + buildInputs = with pkgs; [ + #LANG & COMPILER + gcc (with llvmPackages; [ libcxxClang ]) + gnumake cmake + go gotools + jdk gradle maven + kotlin + nodejs yarn-berry + crystal shards + python311Full virtualenv (with python311Packages; [ pip ]) pipenv + scala sbt + + #LIBS + openssl pcre pcre2 + ncurses patchelf zlib + + #DBG & TOOLS + gdbgui valgrind + sox + docker-compose + + #CUSTOM (custom...) + ]; + shellHook = '' + export DEVSH="DEV" + export HTTP_PORT=8080 + export HTTP_ADDR="0.0.0.0" + ''; +} \ No newline at end of file diff --git a/modules/fonts.nix b/modules/fonts.nix new file mode 100755 index 0000000..9ff23de --- /dev/null +++ b/modules/fonts.nix @@ -0,0 +1,34 @@ +{ + pkgs, + ... +}: { + + fonts = { + enableDefaultPackages = false; + fontDir.enable = true; + #fonts = with pkgs; [ + packages = with pkgs; [ + ibm-plex + lmmath + openmoji-color + material-design-icons + + noto-fonts + unifont + ]; + + fontconfig = { + enable = true; + allowBitmaps = true; + defaultFonts = { + monospace = [ "IBM Plex Mono" "Openmoji" "Material Design Icons"]; + serif = [ "IBM Plex Sans" "Openmoji" "Material Design Icons"]; + sansSerif = [ "IBM Plex Sans" "Openmoji" "Material Design Icons"]; + emoji = [ "Openmoji" ]; + }; + + hinting.style = "medium"; + # hinting.style = "hintfull"; + }; + }; +} diff --git a/modules/greetd.nix b/modules/greetd.nix new file mode 100755 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 100755 index 0000000..df075cd --- /dev/null +++ b/modules/networking.nix @@ -0,0 +1,67 @@ +{ + config, + ... +}: +{ + networking = { + + hostName = config.hostcfg.hostname; + useDHCP = true; + nameservers = [ "1.1.1.1" "9.9.9.9" ]; + supplicant = { + "${config.hostcfg.wlp_if}" = { + configFile.path = config.sops.secrets.wifi.path; + extraConf = '' + network={ + ssid="test" + psk="12345678" + } + network={ + ssid="WIFIonICE" + } + network={ + ssid="JR-EAST_FREE_Wi-Fi" + } + network={ + ssid="JR-WEST_FREE_Wi-Fi" + } + network={ + ssid="tabinohotel" + psk="tabinohotel" + } + network={ + ssid="comforthotel" + psk="comforthotel" + } + network={ + ssid="sotetsu-hotels" + psk="sotetsux" + } + ''; + }; + }; + + 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 = 30; + }]; + }; + }; + }; + + }; + +} diff --git a/modules/secret.nix b/modules/secret.nix new file mode 100755 index 0000000..3833aec --- /dev/null +++ b/modules/secret.nix @@ -0,0 +1,24 @@ +{ + 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" = { + mode = "0400"; + owner = config.users.users.sora.name; + group = config.users.users.sora.group; + }; + sops.secrets."${config.hostcfg.hostname}_ssh_pub" = { + mode = "0400"; + owner = config.users.users.sora.name; + group = config.users.users.sora.group; + }; + 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 100755 index 0000000..ce2f03c --- /dev/null +++ b/modules/security.nix @@ -0,0 +1,50 @@ +# 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; + }; +} + diff --git a/modules/tlp.nix b/modules/tlp.nix new file mode 100644 index 0000000..9a1ebf5 --- /dev/null +++ b/modules/tlp.nix @@ -0,0 +1,11 @@ +{...}:{ + services.tlp = { + enable = true; + settings = { + START_CHARGE_THRESH_BAT0 = 75; + STOP_CHARGE_THRESH_BAT0 = 90; + CPU_SCALING_GOVERNOR_ON_AC = "performance"; + CPU_SCALING_GOVERNOR_ON_BAT = "powersave"; + }; + }; +} \ No newline at end of file diff --git a/modules/udevd.nix b/modules/udevd.nix new file mode 100755 index 0000000..fff0ffa --- /dev/null +++ b/modules/udevd.nix @@ -0,0 +1,15 @@ +{ + ... +}: { + systemd.services.systemd-udevd.restartIfChanged = false; + + services.udev.extraRules = '' + SUBSYSTEM=="usb", ATTRS{idVendor}=="2104", ATTRS{idProduct}=="0127", GROUP="plugdev", TAG+="uaccess" + SUBSYSTEM=="usb", ATTRS{idVendor}=="2104", ATTRS{idProduct}=="0118", GROUP="plugdev", TAG+="uaccess" + SUBSYSTEM=="usb", ATTRS{idVendor}=="2104", ATTRS{idProduct}=="0106", GROUP="plugdev", TAG+="uaccess" + SUBSYSTEM=="usb", ATTRS{idVendor}=="2104", ATTRS{idProduct}=="0128", GROUP="plugdev", TAG+="uaccess" + SUBSYSTEM=="usb", ATTRS{idVendor}=="2104", ATTRS{idProduct}=="010a", GROUP="plugdev", TAG+="uaccess" + SUBSYSTEM=="usb", ATTRS{idVendor}=="2104", ATTRS{idProduct}=="0102", GROUP="plugdev", TAG+="uaccess" + SUBSYSTEM=="usb", ATTRS{idVendor}=="2104", ATTRS{idProduct}=="0313", GROUP="plugdev", TAG+="uaccess" + ''; +} diff --git a/nix.png b/nix.png new file mode 100755 index 0000000..1b5bdd9 Binary files /dev/null and b/nix.png differ diff --git a/pkgs/custom/repalette.nix b/pkgs/custom/repalette.nix new file mode 100644 index 0000000..4814249 --- /dev/null +++ b/pkgs/custom/repalette.nix @@ -0,0 +1,33 @@ +{ lib, stdenv, fetchFromGitHub, makeWrapper, stb +}: + stdenv.mkDerivation rec { + pname = "repalette"; + version = "849e1857cc985968c5dd08377fff27b258931937"; + + src = fetchFromGitHub { + owner = "ziap"; + repo = pname; + rev = version; + sha256 = "sha256-Q86W9/xwFjViIyvnCQfwyQjzrfC122+KK6A3mwJPXOg="; + }; + + nativeBuildInputs = [ + makeWrapper + ]; + + makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ]; + + configurePhase = '' + cp ${stb.src}/stb_image.h stb_image.h + cp ${stb.src}/stb_image_write.h stb_image_write.h + ''; + + buildPhase = '' + make ${pname} + ''; + + installPhase = '' + mkdir -p $out/bin + mv repalette $out/bin + ''; +} \ No newline at end of file diff --git a/pkgs/custom/simc.nix b/pkgs/custom/simc.nix new file mode 100644 index 0000000..82a3623 --- /dev/null +++ b/pkgs/custom/simc.nix @@ -0,0 +1,31 @@ +{ lib, stdenv, fetchFromGitHub, wrapQtAppsHook, qmake, qtbase, qtwebengine, qtwayland +}: +stdenv.mkDerivation rec { + pname = "simc"; + version = "ae04662fca7cad8bf218cd8e43ab05631caad758"; + + src = fetchFromGitHub rec { + owner = "simulationcraft"; + repo = pname; + rev = version; + hash = "sha256-mTo6YTgZMpfyWvdU1JEEmfmBjJlZwAgja1iliOem7mM="; + }; + + nativeBuildInputs = [ wrapQtAppsHook qmake qtwebengine qtbase ]; + + buildInputs = [ qtwayland ]; + + configurePhase = '' + qmake simulationcraft.pro + ''; + + buildPhase = '' + SC_NO_NETWORKING=1 make -j$NIX_BUILD_CORES + ''; + + installPhase = '' + mkdir -p $out/bin + mv gui/SimulationCraft $out/bin + ''; + +} \ No newline at end of file diff --git a/pkgs/custom/vosk-lang.nix b/pkgs/custom/vosk-lang.nix new file mode 100644 index 0000000..5ff363f --- /dev/null +++ b/pkgs/custom/vosk-lang.nix @@ -0,0 +1,64 @@ +{ lib +, stdenv +, fetchurl +, unzip +}: + let vosk_model_wrapper = {name, version, hash}: stdenv.mkDerivation { + name = name; + version = version; + src = fetchurl { + url = "https://alphacephei.com/kaldi/models/vosk-model-${name}-${version}.zip"; + sha256 = hash; + }; + nativeBuildInputs = [ unzip ]; + unpackCmd = "unzip $curSrc"; + + installPhase = '' + mkdir -p $out/usr/share/vosk-models + cp -r . $out/usr/share/vosk-models/${name} + ''; + }; +in +{ + small-en-us = vosk_model_wrapper{ + name = "small-en-us"; + version = "0.15"; + hash = "sha256-MPJiQsTrRJ+UjkLLMC3XpobLKaNCOoNn+Z/0F4CUJJg="; + }; + + en-us = vosk_model_wrapper{ + name = "en-us"; + version = "0.22"; + hash = "sha256-R/moHrsDnbsL0xkXXDasOTwIk7eWwrYwPmTPWMJ7afY="; + }; + + ru = vosk_model_wrapper{ + name = "ru" ; + version = "0.22"; + hash = "sha256-hNniz2MkSA5Odo2n11Ei/RJQ31RJuJ2PnZQX7Hon+yM="; + }; + + small-ja = vosk_model_wrapper{ + name = "small-ja"; + version = "0.22"; + hash = "sha256-76CS0oAVOndhXp4MfXKD6T5gDePRnTvsaGxX7xnVLqw="; + }; + + ja = vosk_model_wrapper{ + name = "ja" ; + version = "0.22"; + hash = "sha256-r2INuBXvcW+QNV+REJK6DHRU2R15Ps3Y3uLfY0Lg6cw="; + }; + + small-de = vosk_model_wrapper{ + name = "small-de"; + version = "0.15"; + hash = "sha256-t+U8kLHwo4RW9M1is2bs1YgDzZfNQrBkOOLBMXE9XkM="; + }; + + de = vosk_model_wrapper{ + name = "de"; + version = "0.21"; + hash = "sha256-JFBgdW+Ng5T8WxNjnPIgt2ICBXlfMPN7aCOHjU9gOyo="; + }; +} diff --git a/pkgs/custom/vosk.nix b/pkgs/custom/vosk.nix new file mode 100644 index 0000000..30be2b4 --- /dev/null +++ b/pkgs/custom/vosk.nix @@ -0,0 +1,22 @@ +{ lib +, stdenv +, fetchurl +, unzip +}: +stdenv.mkDerivation { + name = "vosk-api"; + version = "0.3.45"; + src = fetchurl { + url = "https://github.com/alphacep/vosk-api/releases/download/v0.3.45/vosk-linux-x86_64-0.3.45.zip"; + sha256 = "sha256-u9yO2FxDl59kQxQoiXcOqVy/vFbP+1xdzXOvqHXF+7I="; + }; + nativeBuildInputs = [ unzip ]; + unpackCmd = "unzip $curSrc"; + + installPhase = '' + mkdir -p $out/lib + mv libvosk.so $out/lib/ + mkdir -p $out/include + mv vosk_api.h $out/include/ + ''; +} \ No newline at end of file diff --git a/pkgs/custom/voskcli.nix b/pkgs/custom/voskcli.nix new file mode 100644 index 0000000..ab7ba93 --- /dev/null +++ b/pkgs/custom/voskcli.nix @@ -0,0 +1,29 @@ +{ lib, stdenv, fetchFromGitea, buildGoModule, makeWrapper, custom, alsa-utils +}: +buildGoModule rec { + pname = "voskcli"; + version = "5eedba33b96dcd3826010cbd12e404cbfb544383"; + vendorSha256 = "sha256-8l2i/fhN+2q+tjHpWdjRmesDDBBpxEPrTB8IE5Cr0I8="; + src = fetchFromGitea { + domain = "git.helcel.net"; + owner = "helcel"; + repo = pname; + rev = version; + sha256 = "sha256-TeCUtHuBGVyV+YmY3MGaf1jydTWgZITUgmUZzy4wZLU="; + }; + preBuild = '' + export CGO_CFLAGS="-I${custom.vosk}/include" + export CGO_LDFLAGS="-L${custom.vosk}/lib" + ''; + nativeBuildInputs = [ makeWrapper ]; + installPhase = '' + runHook preInstall + install -Dm755 $GOPATH/bin/voskcli -t $out/bin + runHook postInstall + ''; + postFixup = '' + wrapProgram $out/bin/voskcli \ + --prefix PATH : ${lib.makeBinPath [ alsa-utils ]} \ + --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ stdenv.cc.cc.lib ]} \ + ''; +} \ No newline at end of file diff --git a/pkgs/default.nix b/pkgs/default.nix new file mode 100644 index 0000000..eca01bd --- /dev/null +++ b/pkgs/default.nix @@ -0,0 +1,18 @@ +{ + pkgs, + ... +}: let self = { + simc = (pkgs.qt6.callPackage ./custom/simc.nix { }); + repalette = (pkgs.callPackage ./custom/repalette.nix { stdenv = pkgs.llvmPackages.stdenv; }); + + vosk = (pkgs.callPackage ./custom/vosk.nix { }); + vosk-lang = (pkgs.callPackage ./custom/vosk-lang.nix { }); + voskcli = (pkgs.callPackage ./custom/voskcli.nix { custom = self;}); + + pythonPackages = { + # example = (pkgs.python3Packages.callPackage ./custom/example.nix { }); + }; + nodePackages = { + }; +}; +in self \ No newline at end of file diff --git a/pkgs/overlay.nix b/pkgs/overlay.nix new file mode 100755 index 0000000..9df5d18 --- /dev/null +++ b/pkgs/overlay.nix @@ -0,0 +1,26 @@ +{ + pkgs, + ... +}: + [(self: super: rec{ + openttd-jgrpp = super.openttd-jgrpp.overrideAttrs (old: rec{ + version = "0.53.3"; + + src = super.fetchFromGitHub rec { + owner = "JGRennison"; + repo = "OpenTTD-patches"; + rev = "jgrpp-0.53.3"; + hash = "sha256-xpo4E07ifWUZy5z78Fwm1SpLP3wUBaBreZYbJuiNH3w="; + }; + }); + + yarn-berry = super.yarn-berry.overrideAttrs (old: rec{ + version = "3.6.3"; + src = super.fetchFromGitHub { + owner = "yarnpkg"; + repo = "berry"; + rev = "@yarnpkg/cli/${version}"; + hash = "sha256-5QEnFalOEMs1bKYDYpFGnF1YwiGuW3ZxstyJAjz1/KQ="; + }; + }); +})] diff --git a/secrets/common.yaml b/secrets/common.yaml new file mode 100755 index 0000000..47fb7da --- /dev/null +++ b/secrets/common.yaml @@ -0,0 +1,93 @@ +valinor_ssh_priv: ENC[AES256_GCM,data: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,iv:pTQbb6nLHJ8BXTIYdiSe4vc5+1hpNuHhQhDkIAsZ9HI=,tag:jyO99VXSsCQlQD+Hh+gtvg==,type:str] +valinor_ssh_pub: ENC[AES256_GCM,data:c9s+tEjn+aZAjsxU7+dWmKLVc3dFdtna3ilDJrEb4k9TToyYY5VYEW6exxpbBl6MMAe98/KXgLPI5kTmq3gCqQe2dBnOB3C4f212DOmVyoYGj4AiqzU+Oo0pfg6DRw5BCjYGY7B+zJopqQgDvlIRTdJzAhQe3ZRuJFXKupVpJ+pEx56bo/memAf+BBZgIXChFrYadqze90rMmlw0D5V3L3lmTnqjoniXTXj5QoHh2f873qFAQ72+fSNlJCkasNavSiXKWVPcS3xMmgfiaffkqdO6pte1m/IgevKkKfciIOBbKskgsTZdy9iPGdELLH1wMzO45+vX3h2ATy/v5Hqq/yWlrDbvFFUKoaCb6n7/5O3MhaLwa78Uk09Dvbno2Wb8C5BBZlXBZ/BSooosDFUG/2IG8nKM+FrHJvtwgugCGa3ZQYKQr6iJ9g6tN83YRTEgKTCsZPnSNg+vXSBAib5ABHl8z7oHVB2hJFBnEn7Im99b/GRsCRD+/y9Y+4wF8nzznJgSrqInM59//EJHmwOWrHzSIpyV+cY67cCUXlkYB/ufx510XtEjijr2SOJXKmdAmme0EICkP/LY80Yrsoz2ee/A6w6ZP3HDHuxUVNeGNJvdoFhIyt9pEiRBwl7K2XKYCh/lRiE6E19EM6SmwplEM0+uAWTY+NUKZba2JSqFZLMlBFfWSLHgOHFLPatkZRUTkoNa4BOhtUlAYfuN/uHHimnL7H4O814OnjU5exqHca63VkDDhA==,iv:YT0ZN/Rt6CbMSFU1wZDbrenlwXCh7e4C06YbVL5J/VU=,tag:BqVtzOC1ViEkHHTXbgDJHw==,type:str] +valinor_wg_priv: ENC[AES256_GCM,data:1izZF+6G2Uc2MRBH56A07lexZEkyOiiFI4zltyoZco0+Y9EPhH1nJ4sWzs0=,iv:OIBIQvMsrq93/o0r8V6eSzfU63xtCzgQFf8NKXsjRk0=,tag:wdcQOfdaoxe7Vw0QWmngwA==,type:str] +valinor_wg_pub: ENC[AES256_GCM,data:noAhVF91HUwpU3lHl4knlmGkV0Zjbuc4TQhFhF7HjCbv1hdSycO17TDfgcw=,iv:82v169pOoCOwnOaqPTOMvtvOUJJEcXjPI9BzogC+UaI=,tag:NHIcOYD5mSnZ6kwZBAnXGg==,type:str] +iriy_ssh_priv: ENC[AES256_GCM,data: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,iv:cM6fDDPdHQ0Xamv41gKvCQ3Oh70hCRaijXLA8n2rEEA=,tag:7CsbqkiNGv7W5lCrPK3CmQ==,type:str] +iriy_ssh_pub: ENC[AES256_GCM,data:zjET00BIFhSI3/3bHO9d99VZLNqpGwWYuqhFvZAk6hYejOFRReCn3WKxXwEJh/IS8PYw1ARnj8DOpfYoRwhdofg+ap2/XMLE858B2cmgGQE5XZNftUryjmBV/WpWVECmAa/Dd6w71MACqZ9TDnt8Kkg5c0jtiGT7zg62/gMcjm/k531y1NDi4e8Jf7MFN9A/5nMpVDCpspZe42N2Lv+w0M2lhDrP4bjYTE9p7Klo27C7lt3vGahlNAjQBvx3o+309+4bSnE2hwTUkgwjN8YPx9qpV8v5XAfPEA3Syz4Qmhi6YpDnEsNPIVrmuGdNhrnprDQHJ8G04bHv51DXURf7Wtf8HSQUNVWXJoGb1jw5xzyiYEBB1Cu6VrRRHytQGtMMbQsIldoW7ISSo1jzRIPWJRMCYrY/4fneoALAXPN6u6VsYM+wtO6/1+A02KIz4uhHvt9c+iv2BNiJrwgHSdH2aY3JaOLEAI+wVQaf47WBfPIjfTzYsDx+kDNiflmBhENNWSqRnrXXLiAG0oVbbz0iuzA+C6w/gNc/t4L4foiMbeF3m9jVfFm3LrCmR1FJrGeA7ZSUAEQ6v55an+IbDMv7P9lUxgd7rsCj2M0elG2iDizV9vziFPOSJkplqzygxXZdo+In0pmRHUfWj06epacZjNdDxJHrakfhmWpGBvrwYRRp4/5p7/k2CToqj6UqedYen0S8M09JseHjNndr9/Oe2yJZYlzRhfq0ZDB1pzdVIiePcQ==,iv:nWWm3vecA7c5pv8bYrjjZk3VLHjKJI7c7ZPkK+pUqU4=,tag:Gfa5Izk6I3s/spA3GkXufQ==,type:str] +iriy_wg_priv: ENC[AES256_GCM,data:inng2niJrTXF3ld2T5Xs9t/64oDC8haJhpK1Iajpc60hMHWbenpqGRis7NM=,iv:E/cW6iwjbC3iKulvgBD5vXsjxh9A6nGO7Acr2DXAQps=,tag:CfHqE8u87xGDkzArZg3BnA==,type:str] +iriy_wg_pub: ENC[AES256_GCM,data:/4yPr9+NKyU/84L1heVhVa5Mzu6/9bTRciL4V8v31J99Fh5ratZDufNt8AY=,iv:1PzTUsgt1YQPQAywSQqBUVm08++EA9rTdQF/puRJMs8=,tag:ew+bmkZmlj74/mzdBPiSDA==,type:str] +avalon_ssh_priv: ENC[AES256_GCM,data:wTAQKXU=,iv:7x+5AnmbNde6lsr+y5MlkR7KoaOUSCGTCVwLECYxPHI=,tag:DkrosVUFtURFBuqQI0LxaQ==,type:bool] +avalon_ssh_pub: ENC[AES256_GCM,data:22S09ak=,iv:Q5SU6BQw9j4HMyohQorIeNwGL0xLx8erm10gvPpHmCc=,tag:o02ZcLBSz35sqY9INyOMRw==,type:bool] +avalon_wg_priv: ENC[AES256_GCM,data:Urf0hCzMoyo3IiV+0zhiHGhh3vfinrMAFbX9JwFgkXiW+3+AXN2b1b785JE=,iv:TV0zwPssXOEVSxiVo0jZwFCmZJiTSXXXctFXFX0H97s=,tag:YDNaw6dRBcbyMSjXTRIJmw==,type:str] +avalon_wg_pub: ENC[AES256_GCM,data:Lc8LIn3UX6mpN8WWum18OVI5LWjBLoW2Qles4Bv/cKP6yOfKTLXPkAYzmFU=,iv:P3UJr5aHkW07HVH0oy500HdsumZpcwwuRdRKx/Efgjo=,tag:U9G9Ja+7mS1x6no+MVptiQ==,type:str] +asgard_ssh_priv: ENC[AES256_GCM,data:PflBgd0=,iv:OvKG6iGAtvcx7Nw/CT3mJos69ECG0k5CasZMzg/xWo8=,tag:X9iQY/nDBb5Dz9a+rnN9Rg==,type:bool] +asgard_ssh_pub: ENC[AES256_GCM,data:+M50sSY=,iv:fWVBRPlz/ACENHhOJ5zabu0eqOAAH/AH9+HBqUZZQU8=,tag:UPdE0aLWnhj/zlXpKbdoGw==,type:bool] +asgard_wg_priv: ENC[AES256_GCM,data:YxlKrwQ=,iv:1xnNKjzkJ0KPglLQy35i3FZ6kaJIgf7u0vT4aciDQI8=,tag:Jg5a/215Ifxj/XXMkSHwMg==,type:bool] +asgard_wg_pub: ENC[AES256_GCM,data:7ojknU8=,iv:Rk2otESlMbnVItBS0Xo2JeoSjOiDusUnsMVMw9/4oU4=,tag:FD0S6AfDfvVgvgy0coF/Uw==,type:bool] +efir_ssh_priv: ENC[AES256_GCM,data:lfC0LrU=,iv:QCNZWYj1bokbZwVbPanuWzljwTv8k1yRvJJYzXiffRw=,tag:1r0myqf+wk0paT3ODStB6A==,type:bool] +efir_ssh_pub: ENC[AES256_GCM,data:s2CtFco=,iv:5ckMLWh/OrANzuN7dChi87jJqp8ulbTuhefteVijVeU=,tag:0Ojvf/u6Vs0tKiPzLnaHuQ==,type:bool] +efir_wg_priv: ENC[AES256_GCM,data:jxmtVME=,iv:4SJC/lexF/oxgZp4QDAA+MhLU50K6G7g4IgQmbXl81s=,tag:wC7h+uCgBfGFynIZlyaOng==,type:bool] +efir_wg_pub: ENC[AES256_GCM,data:lYCUem4=,iv:FmIo/U0Zo9O2pbiehLLbTe9bWKzRRjEJHP53zXPvhAU=,tag:nQKx887kvTKaoKIXTR+/EA==,type:bool] +vpn_ssh_priv: ENC[AES256_GCM,data:RQhNAZg=,iv:PHdobW9HIEITGaIq86YbOFhyf7OTeTzhgjWVKo0YgNs=,tag:EhSAJz8N2OAuHC7sbvBj+w==,type:bool] +vpn_ssh_pub: ENC[AES256_GCM,data:K7+ZMxQ=,iv:xp1ghLqP5sk91feAIxC1JpHOkCzBfYBO9rHW9ghfqAM=,tag:eX8s7hGITevnerFo1VpfRg==,type:bool] +vpn_wg_priv: ENC[AES256_GCM,data:YS2NMqSZdH6gTQq89sWNLna6sLFIzR+uDFurFP1s+3Pe1+QP/SAiX81PZfc=,iv:Ovm3ir8ia5793yYPsKrscpqc4A6B6r270hpx9pWmR1o=,tag:asWYQrENr5ip8kHdb2mkYw==,type:str] +vpn_wg_pub: ENC[AES256_GCM,data:orLTPlTD5Y6bimDcc+BFJytQFER2POfgcOFEk6zcKkvuq/GyU8bKgKLxuyM=,iv:TVHw+yVhlDJFz/8HYqI3qT85hGzgx+3Bj7mT0mr3dFE=,tag:EKDs8gE8RJMGQVfcYLj9Jw==,type:str] +pgp_key: ENC[AES256_GCM,data:nEMur/Uq,iv:2KXW/AAAWDX09Ich2S6LQ7618ZBAY61KZcGkIabqCLs=,tag:Q7o8fz3dFFuqeMpzu9U/Fg==,type:str] +wifi: ENC[AES256_GCM,data:LBDjdh4/Kny4cz7WZ5EGeFH7k0PGdERBq0/2wAWHdZtAhC2avlVNRfV8n/DsRodaUVm/6/tCXmXGOfqkzRgC9drQmDxeJWe5IhjJpOOOAXvLA/BCgzwu/Poi4b2KiXdZ1BgznMBV9+EBNFR55+KAb+GjjEIR96G15wGTfk3D0hPs9sE238OcfKFLv5L7ptUN7qnmAH6M4AIEKk0gv+J9dyu3UAw7qfdr6uiuPsYOoQ95A2q1OpERh7VnfsI6zjJ8vKSKbG/yb0VOhcCOlM1oijqSw+fUIMBlOQ9wWyWN2brqkhACqqIiBWxrqfPHQT2mobMTgE4vw1BruzTnhBrqtCeGG8yHEZnL/8NU4z3NQDG3FfYScVNDAvMrW+06HHKRi43vJ1Zz7HMb6ik8ZOKFI4CvsYingNSD1cAXt3FMet5PvVFfWErsrpO3dST7A0ZSb56N+fXrfBcB8jdxsOZBopfksFpx81J/VLLdAoO0aXtYhZlMM11nuCjkgTFPvwkxy2e/+gZVqPbWEaDeJ5j2bEB7lJ1DpMX88FN9g0zhA6cufVbSanaLCvCDCdxTslZVauO0mlmOBh0GMPD7Oi/l8hdCX74PqjSx0kmH4RWRL6Jei2PPnAEW4scWrhUOKxMaagFsLFyKvy3HYAnTqevlEi8FXmS2hglQzsN3H7343kaV+OSTy50uOG9wr7T3rbztcKDOf9dp1CM4JVk933wOmMdg7nXBrU16ELVYlWuBHgswHiBtZQXVvQBPhxp7giFjduhXlg92wvmV2ZEcVOSiDJp4nJsiIaGmwbq6PsO/1Xy5sIJ0/jh1aJwAnp507xEXl0tvcBXSdaXpHdUnKnBPw9q8Gt9Td+UoLgEb13Dy1op9Fs9iA9LMX1EMQe6d,iv:rxAs2PD9EWNONqU0Hh9DJfECJ93nnRMrbUCwormAwxw=,tag:+n0iICniidi4H0Zv9pCDfA==,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-08-05T09:52:06Z" + mac: ENC[AES256_GCM,data:lIY0q/K772KOiRZ24QgPtWqN67FqOdKScfJ/G8tY/VOe+KquGSIIIIyXZoIjvjEnVZpKleQfqGpcbssZR491r09xDazhadCOtEfY3YGtNUYSDcWfgHjYOYm22Pa/8YK90aAwc/2BAY6X0mXR/zPPTpdALvzIGYaS5EYVLdcdcxI=,iv:kMAgc7e8ATA2ZGRXKt1XdVWlc17OIccnCndBzKVw4T4=,tag:pR+xVV5bnE2nP/7fGWSm3Q==,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