mirror of
https://github.com/ItsDrike/nixdots
synced 2024-11-14 16:17:17 +00:00
Compare commits
No commits in common. "408e9fc6cb72f82cbe04fe21c3f38d36773c9b6b" and "c916fd31b47b9bca08c55d14b2ca51220ac3fff6" have entirely different histories.
408e9fc6cb
...
c916fd31b4
305
flake.lock
305
flake.lock
|
@ -33,28 +33,6 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"crane_2": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"schizofox",
|
|
||||||
"searx-randomizer",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1701386725,
|
|
||||||
"narHash": "sha256-w4aBlMYh9Y8co1V80m5LzEKMijUJ7CBTq209WbqVwUU=",
|
|
||||||
"owner": "ipetkov",
|
|
||||||
"repo": "crane",
|
|
||||||
"rev": "8b9bad9b30bd7a9ed08782e64846b7485f9d0a38",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "ipetkov",
|
|
||||||
"repo": "crane",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"flake-compat": {
|
"flake-compat": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
|
@ -71,22 +49,6 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"flake-compat_2": {
|
|
||||||
"flake": false,
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1696426674,
|
|
||||||
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
|
|
||||||
"owner": "edolstra",
|
|
||||||
"repo": "flake-compat",
|
|
||||||
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "edolstra",
|
|
||||||
"repo": "flake-compat",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"flake-parts": {
|
"flake-parts": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs-lib": [
|
"nixpkgs-lib": [
|
||||||
|
@ -108,66 +70,6 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"flake-parts_2": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs-lib": [
|
|
||||||
"nixpak",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1717285511,
|
|
||||||
"narHash": "sha256-iKzJcpdXih14qYVcZ9QC9XuZYnPc6T8YImb6dX166kw=",
|
|
||||||
"owner": "hercules-ci",
|
|
||||||
"repo": "flake-parts",
|
|
||||||
"rev": "2a55567fcf15b1b1c7ed712a2c6fadaec7412ea8",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "hercules-ci",
|
|
||||||
"repo": "flake-parts",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"flake-parts_3": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs-lib": [
|
|
||||||
"schizofox",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1717285511,
|
|
||||||
"narHash": "sha256-iKzJcpdXih14qYVcZ9QC9XuZYnPc6T8YImb6dX166kw=",
|
|
||||||
"owner": "hercules-ci",
|
|
||||||
"repo": "flake-parts",
|
|
||||||
"rev": "2a55567fcf15b1b1c7ed712a2c6fadaec7412ea8",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "hercules-ci",
|
|
||||||
"repo": "flake-parts",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"flake-parts_4": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs-lib": "nixpkgs-lib"
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1698882062,
|
|
||||||
"narHash": "sha256-HkhafUayIqxXyHH1X8d9RDl1M2CkFgZLjKD3MzabiEo=",
|
|
||||||
"owner": "hercules-ci",
|
|
||||||
"repo": "flake-parts",
|
|
||||||
"rev": "8c9fa2545007b49a5db5f650ae91f227672c3877",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "hercules-ci",
|
|
||||||
"repo": "flake-parts",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"flake-utils": {
|
"flake-utils": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"systems": "systems"
|
"systems": "systems"
|
||||||
|
@ -188,7 +90,7 @@
|
||||||
},
|
},
|
||||||
"flake-utils_2": {
|
"flake-utils_2": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"systems": "systems_3"
|
"systems": "systems_2"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1685518550,
|
"lastModified": 1685518550,
|
||||||
|
@ -226,58 +128,6 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"hercules-ci-effects": {
|
|
||||||
"inputs": {
|
|
||||||
"flake-parts": [
|
|
||||||
"nixpak",
|
|
||||||
"flake-parts"
|
|
||||||
],
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixpak",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1713898448,
|
|
||||||
"narHash": "sha256-6q6ojsp/Z9P2goqnxyfCSzFOD92T3Uobmj8oVAicUOs=",
|
|
||||||
"owner": "hercules-ci",
|
|
||||||
"repo": "hercules-ci-effects",
|
|
||||||
"rev": "c0302ec12d569532a6b6bd218f698bc402e93adc",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "hercules-ci",
|
|
||||||
"repo": "hercules-ci-effects",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"hercules-ci-effects_2": {
|
|
||||||
"inputs": {
|
|
||||||
"flake-parts": [
|
|
||||||
"schizofox",
|
|
||||||
"nixpak",
|
|
||||||
"flake-parts"
|
|
||||||
],
|
|
||||||
"nixpkgs": [
|
|
||||||
"schizofox",
|
|
||||||
"nixpak",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1713898448,
|
|
||||||
"narHash": "sha256-6q6ojsp/Z9P2goqnxyfCSzFOD92T3Uobmj8oVAicUOs=",
|
|
||||||
"owner": "hercules-ci",
|
|
||||||
"repo": "hercules-ci-effects",
|
|
||||||
"rev": "c0302ec12d569532a6b6bd218f698bc402e93adc",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "hercules-ci",
|
|
||||||
"repo": "hercules-ci-effects",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"home-manager": {
|
"home-manager": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
|
@ -298,27 +148,6 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"home-manager_2": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"schizofox",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1717097707,
|
|
||||||
"narHash": "sha256-HC5vJ3oYsjwsCaSbkIPv80e4ebJpNvFKQTBOGlHvjLs=",
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "home-manager",
|
|
||||||
"rev": "0eb314b4f0ba337e88123e0b1e57ef58346aafd9",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "home-manager",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"impermanence": {
|
"impermanence": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1717932370,
|
"lastModified": 1717932370,
|
||||||
|
@ -361,54 +190,6 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpak": {
|
|
||||||
"inputs": {
|
|
||||||
"flake-parts": "flake-parts_2",
|
|
||||||
"hercules-ci-effects": "hercules-ci-effects",
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1717865884,
|
|
||||||
"narHash": "sha256-imcv6tx4lSfffv6o8T0cIxJmgheItGSSGzxyO4cWnKg=",
|
|
||||||
"owner": "nixpak",
|
|
||||||
"repo": "nixpak",
|
|
||||||
"rev": "f938c3c01026c00a305b5fba8edeb8f7efcfb85a",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nixpak",
|
|
||||||
"repo": "nixpak",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixpak_2": {
|
|
||||||
"inputs": {
|
|
||||||
"flake-parts": [
|
|
||||||
"schizofox",
|
|
||||||
"flake-parts"
|
|
||||||
],
|
|
||||||
"hercules-ci-effects": "hercules-ci-effects_2",
|
|
||||||
"nixpkgs": [
|
|
||||||
"schizofox",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1717036060,
|
|
||||||
"narHash": "sha256-Bm1pBy1goxIz9PD0PRJ9ZgQzl7MQOQ6n5IB4wLNdXrA=",
|
|
||||||
"owner": "nixpak",
|
|
||||||
"repo": "nixpak",
|
|
||||||
"rev": "3a68b5453f75b1c8e5d31859a654e061a57dc059",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nixpak",
|
|
||||||
"repo": "nixpak",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1717786204,
|
"lastModified": 1717786204,
|
||||||
|
@ -425,24 +206,6 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs-lib": {
|
|
||||||
"locked": {
|
|
||||||
"dir": "lib",
|
|
||||||
"lastModified": 1698611440,
|
|
||||||
"narHash": "sha256-jPjHjrerhYDy3q9+s5EAsuhyhuknNfowY6yt6pjn9pc=",
|
|
||||||
"owner": "NixOS",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"rev": "0cbe9f69c234a7700596e943bfae7ef27a31b735",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"dir": "lib",
|
|
||||||
"owner": "NixOS",
|
|
||||||
"ref": "nixos-unstable",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixpkgs-stable": {
|
"nixpkgs-stable": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1678872516,
|
"lastModified": 1678872516,
|
||||||
|
@ -495,9 +258,7 @@
|
||||||
"home-manager": "home-manager",
|
"home-manager": "home-manager",
|
||||||
"impermanence": "impermanence",
|
"impermanence": "impermanence",
|
||||||
"lanzaboote": "lanzaboote",
|
"lanzaboote": "lanzaboote",
|
||||||
"nixpak": "nixpak",
|
|
||||||
"nixpkgs": "nixpkgs",
|
"nixpkgs": "nixpkgs",
|
||||||
"schizofox": "schizofox",
|
|
||||||
"spicetify": "spicetify"
|
"spicetify": "spicetify"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -526,55 +287,6 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"schizofox": {
|
|
||||||
"inputs": {
|
|
||||||
"flake-compat": "flake-compat_2",
|
|
||||||
"flake-parts": "flake-parts_3",
|
|
||||||
"home-manager": "home-manager_2",
|
|
||||||
"nixpak": "nixpak_2",
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixpkgs"
|
|
||||||
],
|
|
||||||
"searx-randomizer": "searx-randomizer",
|
|
||||||
"systems": "systems_2"
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1717289290,
|
|
||||||
"narHash": "sha256-NS2WFE2mEodtPATQIC16N0ylWnog8B0IownZWnM9JPE=",
|
|
||||||
"owner": "schizofox",
|
|
||||||
"repo": "schizofox",
|
|
||||||
"rev": "04e204d8f605a45e2537343a5e467d5af0518eef",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "schizofox",
|
|
||||||
"repo": "schizofox",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"searx-randomizer": {
|
|
||||||
"inputs": {
|
|
||||||
"crane": "crane_2",
|
|
||||||
"flake-parts": "flake-parts_4",
|
|
||||||
"nixpkgs": [
|
|
||||||
"schizofox",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1704412376,
|
|
||||||
"narHash": "sha256-Ap/AudJxCYBDWYy0lyqP0/FZYJCibL7jKkoj6hp1WS0=",
|
|
||||||
"owner": "schizofox",
|
|
||||||
"repo": "searx-randomizer",
|
|
||||||
"rev": "c36a473732ba6b4f6024ac1c181631cf4d542b17",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "schizofox",
|
|
||||||
"repo": "searx-randomizer",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"spicetify": {
|
"spicetify": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-utils": "flake-utils_2",
|
"flake-utils": "flake-utils_2",
|
||||||
|
@ -612,21 +324,6 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"systems_2": {
|
"systems_2": {
|
||||||
"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"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"systems_3": {
|
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1681028828,
|
"lastModified": 1681028828,
|
||||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
|
|
15
flake.nix
15
flake.nix
|
@ -18,25 +18,10 @@
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
# Spotify + themes
|
|
||||||
spicetify = {
|
spicetify = {
|
||||||
url = "github:the-argus/spicetify-nix";
|
url = "github:the-argus/spicetify-nix";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
# Sandbox wrappers for programs
|
|
||||||
nixpak = {
|
|
||||||
url = "github:nixpak/nixpak";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
|
|
||||||
# Schizophrenic Firefox
|
|
||||||
schizofox = {
|
|
||||||
url = "github:schizofox/schizofox";
|
|
||||||
inputs = {
|
|
||||||
nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = {self, nixpkgs, ...} @ inputs: let
|
outputs = {self, nixpkgs, ...} @ inputs: let
|
||||||
|
|
|
@ -2,6 +2,5 @@ _: {
|
||||||
imports = [
|
imports = [
|
||||||
./shared.nix
|
./shared.nix
|
||||||
./desktop.nix
|
./desktop.nix
|
||||||
./wayland.nix
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +0,0 @@
|
||||||
{
|
|
||||||
osConfig,
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
inherit (lib) mkIf;
|
|
||||||
in {
|
|
||||||
config = mkIf osConfig.myOptions.home-manager.wms.isWayland {
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
wl-clipboard
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,5 +0,0 @@
|
||||||
_: {
|
|
||||||
imports = [
|
|
||||||
./eww
|
|
||||||
];
|
|
||||||
}
|
|
|
@ -1,43 +0,0 @@
|
||||||
$rosewater: #f5e0dc;
|
|
||||||
$flamingo: #f2cdcd;
|
|
||||||
$pink: #f5c2e7;
|
|
||||||
$mauve: #cba6f7;
|
|
||||||
$red: #f38ba8;
|
|
||||||
$maroon: #eba0ac;
|
|
||||||
$peach: #fab387;
|
|
||||||
$yellow: #f9e2af;
|
|
||||||
$gold: #efcb10;
|
|
||||||
$green: #a6e3a1;
|
|
||||||
$lime: #78db32;
|
|
||||||
$teal: #94e2d5;
|
|
||||||
$sky: #89dceb;
|
|
||||||
$sapphire: #74c7ec;
|
|
||||||
$blue: #89b4fa;
|
|
||||||
$lavender: #b4befe;
|
|
||||||
$orange: #ffa500;
|
|
||||||
|
|
||||||
$text: #cdd6f4;
|
|
||||||
$subtext1: #bac2de;
|
|
||||||
$subtext0: #a6adc8;
|
|
||||||
$overlay2: #9399b2;
|
|
||||||
$overlay1: #7f849c;
|
|
||||||
$overlay0: #6c7086;
|
|
||||||
|
|
||||||
$surface2: #585b70;
|
|
||||||
$surface1: #45475a;
|
|
||||||
$surface0: #313244;
|
|
||||||
|
|
||||||
$base-a: rgba(30, 30, 40, 0.65);
|
|
||||||
$base: rgba(30, 30, 40, 1);
|
|
||||||
$base1-a: rgba(49, 50, 68, 0.85);
|
|
||||||
$base1: rgba(49, 50, 68, 1);
|
|
||||||
$mantle: #181825;
|
|
||||||
$crust: #11111b;
|
|
||||||
|
|
||||||
$fg: $text;
|
|
||||||
$bg-a: $base-a;
|
|
||||||
$bg: $base;
|
|
||||||
$bg1: $base1;
|
|
||||||
$bg1-a: $base1-a;
|
|
||||||
$border: #28283d;
|
|
||||||
$shadow: $crust;
|
|
|
@ -1,55 +0,0 @@
|
||||||
@keyframes blink {
|
|
||||||
0%{
|
|
||||||
opacity: 0;
|
|
||||||
}
|
|
||||||
50%{
|
|
||||||
opacity: 0.7;
|
|
||||||
}
|
|
||||||
100%{
|
|
||||||
opacity: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// .unplugged.low {
|
|
||||||
// color: #0000ff;
|
|
||||||
// }
|
|
||||||
|
|
||||||
.battery {
|
|
||||||
|
|
||||||
.icon, .icon label {
|
|
||||||
font-family: "Material Symbols Outlined";
|
|
||||||
|
|
||||||
.extra, .extra label {
|
|
||||||
font-family: "Font Awesome 6 Free";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.critical {
|
|
||||||
.unplugged {
|
|
||||||
color: #f00;
|
|
||||||
.extra { animation: blink 1.2s linear infinite; }
|
|
||||||
}
|
|
||||||
|
|
||||||
.plugged {
|
|
||||||
.icon { color: $orange }
|
|
||||||
.extra { color: $green; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.normal {
|
|
||||||
.unplugged {
|
|
||||||
.icon { color: $orange }
|
|
||||||
}
|
|
||||||
.plugged {
|
|
||||||
.icon { color: $green; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.full {
|
|
||||||
.icon { color: $green; }
|
|
||||||
.extra { color: $lime; }
|
|
||||||
}
|
|
||||||
|
|
||||||
.extra { margin-right: 5px; }
|
|
||||||
.icon { margin-right: 5px; }
|
|
||||||
}
|
|
|
@ -1,3 +0,0 @@
|
||||||
.bitcoin {
|
|
||||||
.icon { margin-right: 6px; color: $gold; }
|
|
||||||
}
|
|
|
@ -1,4 +0,0 @@
|
||||||
.clock {
|
|
||||||
// color: $sapphire;
|
|
||||||
.icon { margin-right: 6px; color: $sapphire; }
|
|
||||||
}
|
|
|
@ -1,3 +0,0 @@
|
||||||
.cpu {
|
|
||||||
.icon { color: $lime; }
|
|
||||||
}
|
|
|
@ -1,7 +0,0 @@
|
||||||
.gammarelay {
|
|
||||||
.icon {
|
|
||||||
color: $peach;
|
|
||||||
margin-left: 2px;
|
|
||||||
margin-right: 2px;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,3 +0,0 @@
|
||||||
.kernel {
|
|
||||||
.icon { color: $lavender; }
|
|
||||||
}
|
|
|
@ -1,3 +0,0 @@
|
||||||
.memory {
|
|
||||||
.icon { color: $maroon; }
|
|
||||||
}
|
|
|
@ -1,3 +0,0 @@
|
||||||
.uptime {
|
|
||||||
.icon { color: $green; }
|
|
||||||
}
|
|
|
@ -1,9 +0,0 @@
|
||||||
.volume {
|
|
||||||
.icon { color: $peach; }
|
|
||||||
.speaker {
|
|
||||||
.icon {
|
|
||||||
margin-left: 8px;
|
|
||||||
margin-right: 5px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,4 +0,0 @@
|
||||||
.window_name {
|
|
||||||
font-family: "JetBrains Mono", "Font Awesome 6 Free", sans-serif;
|
|
||||||
font-size: 1.4rem;
|
|
||||||
}
|
|
|
@ -1,28 +0,0 @@
|
||||||
.workspaces {
|
|
||||||
background-color: $bg1-a;
|
|
||||||
border-radius: 25px;
|
|
||||||
|
|
||||||
.icon, .icon label {
|
|
||||||
font-family: "Material Symbols Outlined";
|
|
||||||
font-size: 1.15rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.value {
|
|
||||||
margin: 0 9px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.focused {
|
|
||||||
// text-decoration: underline;
|
|
||||||
// text-decoration-color: red;
|
|
||||||
// text-decoration-style: double;
|
|
||||||
color: $fg;
|
|
||||||
}
|
|
||||||
|
|
||||||
.active {
|
|
||||||
color: #bbb;
|
|
||||||
}
|
|
||||||
|
|
||||||
.inactive {
|
|
||||||
color: #555;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,32 +0,0 @@
|
||||||
.calendar-win {
|
|
||||||
@include window;
|
|
||||||
background-color: $bg;
|
|
||||||
border: 1px solid $border;
|
|
||||||
color: $fg;
|
|
||||||
padding: .2em;
|
|
||||||
}
|
|
||||||
|
|
||||||
calendar {
|
|
||||||
padding: 5px;
|
|
||||||
|
|
||||||
:selected {
|
|
||||||
color: $mauve;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header {
|
|
||||||
color: $subtext1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.highlight {
|
|
||||||
color: $maroon;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
.button {
|
|
||||||
color: $sapphire;
|
|
||||||
}
|
|
||||||
|
|
||||||
:indeterminate {
|
|
||||||
color: $overlay0;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,46 +0,0 @@
|
||||||
.radio-menu-box {
|
|
||||||
@include window;
|
|
||||||
background-color: $bg;
|
|
||||||
border: 1px solid $border;
|
|
||||||
color: $text;
|
|
||||||
font-family: "Jost *", "JetBrains Mono", "Font Awesome 6 Free", sans-serif;
|
|
||||||
|
|
||||||
.icon, .icon label {
|
|
||||||
font-family: "Material Symbols Outlined";
|
|
||||||
font-size: 1.15rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.text-row {
|
|
||||||
margin: 1rem 1.5rem 0;
|
|
||||||
|
|
||||||
.title { font-size: 1.2rem; }
|
|
||||||
}
|
|
||||||
|
|
||||||
.element-row {
|
|
||||||
margin: .5rem .7rem;
|
|
||||||
|
|
||||||
label {
|
|
||||||
font-size: 1rem;
|
|
||||||
margin: 0 .1rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.element {
|
|
||||||
@include rounding;
|
|
||||||
background-color: $surface0;
|
|
||||||
margin: .3rem;
|
|
||||||
|
|
||||||
button {
|
|
||||||
@include rounding;
|
|
||||||
padding: .5rem;
|
|
||||||
|
|
||||||
label {
|
|
||||||
font-size: 1.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
background-color: $overlay0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,114 +0,0 @@
|
||||||
@import "css/colors";
|
|
||||||
|
|
||||||
@mixin rounding {
|
|
||||||
border-radius: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
@mixin window {
|
|
||||||
border: 1px solid $border;
|
|
||||||
box-shadow: 0 2px 3px $shadow;
|
|
||||||
margin: 5px 5px 10px;
|
|
||||||
@include rounding;
|
|
||||||
}
|
|
||||||
|
|
||||||
* {
|
|
||||||
all: unset;
|
|
||||||
transition: 200ms ease;
|
|
||||||
}
|
|
||||||
|
|
||||||
@import "css/windows/calendar";
|
|
||||||
@import "css/windows/radio_menu";
|
|
||||||
@import "css/modules/clock";
|
|
||||||
@import "css/modules/volume";
|
|
||||||
@import "css/modules/bitcoin";
|
|
||||||
@import "css/modules/cpu";
|
|
||||||
@import "css/modules/memory";
|
|
||||||
@import "css/modules/uptime";
|
|
||||||
@import "css/modules/kernel";
|
|
||||||
@import "css/modules/battery";
|
|
||||||
@import "css/modules/workspaces";
|
|
||||||
@import "css/modules/gammarelay";
|
|
||||||
@import "css/modules/window_name";
|
|
||||||
|
|
||||||
.bar {
|
|
||||||
background-color: $bg-a;
|
|
||||||
color: $fg;
|
|
||||||
|
|
||||||
font-family: "JetBrains Mono", "Jost *", sans-serif;
|
|
||||||
|
|
||||||
label {
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: Use percentages (for some reason it fails now)
|
|
||||||
min-width: 1900px;
|
|
||||||
}
|
|
||||||
|
|
||||||
tooltip {
|
|
||||||
background: $bg;
|
|
||||||
border: 1px solid $border;
|
|
||||||
border-radius: 8px;
|
|
||||||
|
|
||||||
label {
|
|
||||||
font-size: 1rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.icon,
|
|
||||||
.icon label {
|
|
||||||
font-family: "Font Awesome 6 Free", "Material Symbols Outlined";
|
|
||||||
}
|
|
||||||
|
|
||||||
.module {
|
|
||||||
margin: 0 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.separ {
|
|
||||||
color: $surface0;
|
|
||||||
font-size: 1.5rem;
|
|
||||||
padding-bottom: 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
scale trough {
|
|
||||||
background-color: $bg1-a;
|
|
||||||
border-radius: 24px;
|
|
||||||
margin: 0 1rem;
|
|
||||||
min-height: 10px;
|
|
||||||
min-width: 70px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tray {
|
|
||||||
margin-right: 12px;
|
|
||||||
}
|
|
||||||
|
|
||||||
menu {
|
|
||||||
background: $bg1;
|
|
||||||
border-bottom-left-radius: 12px;
|
|
||||||
border-bottom-right-radius: 12px;
|
|
||||||
border: 2px solid rgba($crust, 0.5);
|
|
||||||
padding: 0.5rem 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
menu menu {
|
|
||||||
border-top-left-radius: 12px;
|
|
||||||
border-top-right-radius: 12px;
|
|
||||||
}
|
|
||||||
|
|
||||||
menu > menuitem {
|
|
||||||
padding: 0.4em 1rem;
|
|
||||||
background: transparent;
|
|
||||||
transition: 0.2s ease background;
|
|
||||||
}
|
|
||||||
|
|
||||||
menu > menuitem:hover {
|
|
||||||
background: rgba($overlay1, 0.4);
|
|
||||||
}
|
|
||||||
|
|
||||||
menu > menuitem check:checked ~ label {
|
|
||||||
color: $bg1-a;
|
|
||||||
font-weight: 600;
|
|
||||||
}
|
|
||||||
|
|
||||||
menubar > menuitem {
|
|
||||||
margin-left: 0.6rem;
|
|
||||||
}
|
|
|
@ -1,94 +0,0 @@
|
||||||
(defvar terminal "kitty -e")
|
|
||||||
|
|
||||||
(include "./modules/variables.yuck")
|
|
||||||
|
|
||||||
(include "./modules/clock.yuck")
|
|
||||||
(include "./modules/volume.yuck")
|
|
||||||
(include "./modules/bitcoin.yuck")
|
|
||||||
(include "./modules/cpu.yuck")
|
|
||||||
(include "./modules/memory.yuck")
|
|
||||||
(include "./modules/uptime.yuck")
|
|
||||||
; (include "./modules/kernel.yuck")
|
|
||||||
(include "./modules/battery.yuck")
|
|
||||||
(include "./modules/window_name.yuck")
|
|
||||||
(include "./modules/workspaces.yuck")
|
|
||||||
(include "./modules/gammarelay.yuck")
|
|
||||||
|
|
||||||
(include "./windows/calendar.yuck")
|
|
||||||
(include "./windows/radio-menu.yuck")
|
|
||||||
|
|
||||||
(defwidget sep []
|
|
||||||
(label :class "separ module" :text "|"))
|
|
||||||
|
|
||||||
(defwidget left []
|
|
||||||
(box
|
|
||||||
:space-evenly false
|
|
||||||
:halign "start"
|
|
||||||
(gammarelay_module)
|
|
||||||
(sep)
|
|
||||||
(window_name_module)
|
|
||||||
))
|
|
||||||
|
|
||||||
(defwidget right []
|
|
||||||
(box
|
|
||||||
:space-evenly false
|
|
||||||
:halign "end"
|
|
||||||
; (kernel_module)
|
|
||||||
; (sep)
|
|
||||||
(volume_module)
|
|
||||||
(sep)
|
|
||||||
(battery_module)
|
|
||||||
(sep)
|
|
||||||
(bitcoin_module)
|
|
||||||
(sep)
|
|
||||||
(cpu_module)
|
|
||||||
(sep)
|
|
||||||
(memory_module)
|
|
||||||
(sep)
|
|
||||||
; (uptime_module)
|
|
||||||
; (sep)
|
|
||||||
(clock_module)
|
|
||||||
(sep)
|
|
||||||
(systray
|
|
||||||
:pack-direction "left"
|
|
||||||
:class "module tray"
|
|
||||||
)
|
|
||||||
))
|
|
||||||
|
|
||||||
(defwidget center []
|
|
||||||
(box
|
|
||||||
:space-evenly false
|
|
||||||
:halign "center"
|
|
||||||
(workspaces_module)
|
|
||||||
))
|
|
||||||
|
|
||||||
(defwidget bar []
|
|
||||||
(centerbox
|
|
||||||
:class "bar"
|
|
||||||
:orientation "horizontal"
|
|
||||||
(left)
|
|
||||||
(center)
|
|
||||||
(right)))
|
|
||||||
|
|
||||||
(defwindow bar0
|
|
||||||
:monitor 0
|
|
||||||
:geometry (geometry :x "0%"
|
|
||||||
:y "0%"
|
|
||||||
:width: "100%"
|
|
||||||
:height "32px"
|
|
||||||
:anchor "top center")
|
|
||||||
:stacking "fg"
|
|
||||||
:exclusive true
|
|
||||||
(bar))
|
|
||||||
|
|
||||||
|
|
||||||
(defwindow bar1
|
|
||||||
:monitor 1
|
|
||||||
:geometry (geometry :x "0%"
|
|
||||||
:y "0%"
|
|
||||||
:width: "100%"
|
|
||||||
:height "32px"
|
|
||||||
:anchor "top center")
|
|
||||||
:stacking "fg"
|
|
||||||
:exclusive true
|
|
||||||
(bar))
|
|
|
@ -1,24 +0,0 @@
|
||||||
(defwidget battery_module []
|
|
||||||
(eventbox
|
|
||||||
:class "module battery"
|
|
||||||
|
|
||||||
(box
|
|
||||||
:class {battery.critical ? "critical" : battery.full ? "full" : "normal"}
|
|
||||||
(box
|
|
||||||
:space-evenly false
|
|
||||||
:class {battery.plugged ? "plugged" : "unplugged" }
|
|
||||||
|
|
||||||
(box
|
|
||||||
:class "icon"
|
|
||||||
:space-evenly false
|
|
||||||
|
|
||||||
(label
|
|
||||||
:class "extra"
|
|
||||||
:text {battery.extra_icon})
|
|
||||||
(label
|
|
||||||
:text {battery.capacity_icon}))
|
|
||||||
(label
|
|
||||||
:class "value"
|
|
||||||
:text "${battery.percent}%"
|
|
||||||
)
|
|
||||||
))))
|
|
|
@ -1,14 +0,0 @@
|
||||||
(defwidget bitcoin_module []
|
|
||||||
(eventbox
|
|
||||||
:onclick "~/.local/bin/scripts/cli/bitcoin | xargs -I_ ${EWW_CMD} update bitcoin=_"
|
|
||||||
:class "module bitcoin"
|
|
||||||
|
|
||||||
(box
|
|
||||||
:space-evenly false
|
|
||||||
|
|
||||||
(label
|
|
||||||
:class "icon"
|
|
||||||
:text "")
|
|
||||||
(label :text {bitcoin}))
|
|
||||||
)
|
|
||||||
)
|
|
|
@ -1,18 +0,0 @@
|
||||||
(defwidget clock_module []
|
|
||||||
|
|
||||||
(eventbox
|
|
||||||
:tooltip {time.day}
|
|
||||||
:class "module clock"
|
|
||||||
;; :onclick "${EWW_CMD} open --toggle calendar"
|
|
||||||
|
|
||||||
(box
|
|
||||||
:space-evenly false
|
|
||||||
|
|
||||||
(label
|
|
||||||
:class "icon"
|
|
||||||
:text "")
|
|
||||||
(label
|
|
||||||
:class "value"
|
|
||||||
:text "${time.date} ${time.hour}:${time.minute}")
|
|
||||||
)))
|
|
||||||
|
|
|
@ -1,15 +0,0 @@
|
||||||
(defwidget cpu_module []
|
|
||||||
(eventbox
|
|
||||||
:class "module cpu"
|
|
||||||
|
|
||||||
(box
|
|
||||||
:space-evenly false
|
|
||||||
|
|
||||||
(label
|
|
||||||
:class "icon"
|
|
||||||
:text " ")
|
|
||||||
(label
|
|
||||||
:class "value"
|
|
||||||
:text "${round(EWW_CPU.avg,2)}%"
|
|
||||||
)
|
|
||||||
)))
|
|
|
@ -1,41 +0,0 @@
|
||||||
(defwidget gammarelay_module []
|
|
||||||
(box
|
|
||||||
:class "module gammarelay"
|
|
||||||
|
|
||||||
(eventbox
|
|
||||||
:onscroll "scripts/gammarelay temperature scroll {}"
|
|
||||||
:onclick "scripts/gammarelay temperature set toggle"
|
|
||||||
:onrightclick "scripts/gammarelay temperature set off"
|
|
||||||
:tooltip "${temperature} K"
|
|
||||||
:class "temperature"
|
|
||||||
(box
|
|
||||||
(label
|
|
||||||
:class "icon"
|
|
||||||
:text "")
|
|
||||||
))
|
|
||||||
|
|
||||||
(eventbox
|
|
||||||
:onscroll "scripts/gammarelay brightness scroll {}"
|
|
||||||
:onclick "scripts/gammarelay brightness set toggle"
|
|
||||||
:onrightclick "scripts/gammarelay brightness set off"
|
|
||||||
:tooltip "${brightness}%"
|
|
||||||
:class "brightness"
|
|
||||||
(box
|
|
||||||
(label
|
|
||||||
:class "icon"
|
|
||||||
:text "")
|
|
||||||
))
|
|
||||||
|
|
||||||
; (eventbox
|
|
||||||
; :onscroll "scripts/gammarelay gamma scroll {}"
|
|
||||||
; :onclick "scripts/gammarelay gamma set toggle"
|
|
||||||
; :onrightclick "scripts/gammarelay gamma set off"
|
|
||||||
; :tooltip "${gamma}%"
|
|
||||||
; :class "gamma"
|
|
||||||
; :valign "top"
|
|
||||||
; (box
|
|
||||||
; (label
|
|
||||||
; :class "icon"
|
|
||||||
; :text "γ")
|
|
||||||
; ))
|
|
||||||
))
|
|
|
@ -1,15 +0,0 @@
|
||||||
(defwidget kernel_module []
|
|
||||||
(eventbox
|
|
||||||
:class "module kernel"
|
|
||||||
|
|
||||||
(box
|
|
||||||
:space-evenly false
|
|
||||||
|
|
||||||
(label
|
|
||||||
:class "icon"
|
|
||||||
:text " ")
|
|
||||||
(label
|
|
||||||
:class "value"
|
|
||||||
:text {kernel}
|
|
||||||
)
|
|
||||||
)))
|
|
|
@ -1,15 +0,0 @@
|
||||||
(defwidget memory_module []
|
|
||||||
(eventbox
|
|
||||||
:class "module memory"
|
|
||||||
|
|
||||||
(box
|
|
||||||
:space-evenly false
|
|
||||||
|
|
||||||
(label
|
|
||||||
:class "icon"
|
|
||||||
:text " ")
|
|
||||||
(label
|
|
||||||
:class "value"
|
|
||||||
:text "${round(EWW_RAM.used_mem / 1000000000,1)}G: ${round(EWW_RAM.used_mem_perc,0)}%"
|
|
||||||
)
|
|
||||||
)))
|
|
|
@ -1,3 +0,0 @@
|
||||||
(deflisten nightlight
|
|
||||||
:initial `{"running": false,"temperature": 0}`
|
|
||||||
`scripts/nightlight --state`)
|
|
|
@ -1,15 +0,0 @@
|
||||||
(defwidget uptime_module []
|
|
||||||
(eventbox
|
|
||||||
:class "module uptime"
|
|
||||||
|
|
||||||
(box
|
|
||||||
:space-evenly false
|
|
||||||
|
|
||||||
(label
|
|
||||||
:class "icon"
|
|
||||||
:text " ")
|
|
||||||
(label
|
|
||||||
:class "value"
|
|
||||||
:text {uptime}
|
|
||||||
)
|
|
||||||
)))
|
|
|
@ -1,60 +0,0 @@
|
||||||
(defpoll time
|
|
||||||
:interval "5s"
|
|
||||||
:initial '{"date": "01 Jan", "hour": "00", "minute": "00", "day": "Monday"}'
|
|
||||||
`date +'{"date": "%d %b", "hour": "%H", "minute": "%M", "day": "%A"}'`)
|
|
||||||
|
|
||||||
(deflisten volume
|
|
||||||
:initial '{ "speaker_vol": "100", "speaker_mute": false, "speaker_icon": "", "microphone_mute": false, "microphone_vol": "100", "microphone_icon": "" }'
|
|
||||||
`scripts/volume loop`)
|
|
||||||
|
|
||||||
(deflisten window_name
|
|
||||||
:initial `{"class":"","name":"","formatted_name":""}`
|
|
||||||
`scripts/window_name`)
|
|
||||||
|
|
||||||
(deflisten workspaces
|
|
||||||
:initial `[{"id": 1,"name": "N/A","monitor": "N/A","windows": 1,"hasfullscreen": false,"lastwindow": "N/A","lastwindowtitle": "N/A","format_name": "N/A","active": true}]`
|
|
||||||
`scripts/workspaces --loop`)
|
|
||||||
|
|
||||||
(defpoll battery
|
|
||||||
:interval "1s"
|
|
||||||
:initial '{"percent":"0","plugged":"false","status":"N/A","capacity_icon":"","extra_icon":"","manufacturer":"N/A","model_name":"N/A","technology":"N/A","energy_now":"0","enerfy_full":"0","enerfy_full_design":"0","cycle_count":"0","critical":"false","full":"false"}'
|
|
||||||
`scripts/battery`)
|
|
||||||
|
|
||||||
(defpoll uptime
|
|
||||||
:interval "1m"
|
|
||||||
:initial 'N/A'
|
|
||||||
`uptime -p | sed \\
|
|
||||||
-e 's/^up //' \\
|
|
||||||
-e 's/ years\\?,\\?/y/' \\
|
|
||||||
-e 's/ months\\?,\\?/m/' \\
|
|
||||||
-e 's/ weeks\\?,\\?/w/' \\
|
|
||||||
-e 's/ days\\?,\\?/d/' \\
|
|
||||||
-e 's/ hours\\?,\\?/h/' \\
|
|
||||||
-e 's/ minutes\\?,\\?/m/' \\
|
|
||||||
-e 's/ seconds\\?,\\?/s/' \\
|
|
||||||
| cut -d' ' -f-2`)
|
|
||||||
|
|
||||||
(defpoll bitcoin
|
|
||||||
:interval "5m"
|
|
||||||
:initial "$N/A"
|
|
||||||
`~/.local/bin/scripts/cli/bitcoin`)
|
|
||||||
|
|
||||||
; TODO: Figure out how to store this one-time
|
|
||||||
(defpoll kernel
|
|
||||||
:interval "10000h"
|
|
||||||
:initial 'N/A'
|
|
||||||
; `uname -r | sed -r 's/(.+)-arch(.+)/\\1/'`
|
|
||||||
`uname -r`)
|
|
||||||
|
|
||||||
(deflisten temperature `scripts/gammarelay temperature watch`)
|
|
||||||
(deflisten brightness `scripts/gammarelay brightness watch`)
|
|
||||||
(deflisten gamma `scripts/gammarelay gamma watch`)
|
|
||||||
|
|
||||||
(defpoll net
|
|
||||||
:interval "3s"
|
|
||||||
:initial '{"essid":"N/A","icon":"","state":"unknown","signal":"0"}'
|
|
||||||
`scripts/net status`)
|
|
||||||
(defpoll bluetooth
|
|
||||||
:interval "3s"
|
|
||||||
:initial '{"icon":"","status":"unknown","name":"","mac":"","battery":""}'
|
|
||||||
`scripts/bluetooth status`)
|
|
|
@ -1,40 +0,0 @@
|
||||||
(defvar mic_rev false)
|
|
||||||
|
|
||||||
(defwidget volume_module []
|
|
||||||
(box
|
|
||||||
:class "module volume"
|
|
||||||
:space-evenly false
|
|
||||||
|
|
||||||
(eventbox
|
|
||||||
:onscroll "scripts/volume setvol SOURCE 0.5 {}"
|
|
||||||
:onclick "scripts/volume togglemute SOURCE"
|
|
||||||
:onrightclick "${terminal} pulsemixer &"
|
|
||||||
:onhover "${EWW_CMD} update mic_rev=true"
|
|
||||||
:onhoverlost "${EWW_CMD} update mic_rev=false"
|
|
||||||
:class "microphone"
|
|
||||||
(box
|
|
||||||
(label
|
|
||||||
:class "icon"
|
|
||||||
:text {volume.microphone_icon})
|
|
||||||
(label
|
|
||||||
:visible {mic_rev && !volume.microphone_mute}
|
|
||||||
:class "value"
|
|
||||||
:text "${volume.microphone_vol}%")
|
|
||||||
))
|
|
||||||
|
|
||||||
(eventbox
|
|
||||||
:onscroll "scripts/volume setvol SINK 0.5 {}"
|
|
||||||
:onclick "scripts/volume togglemute SINK"
|
|
||||||
:onrightclick "${terminal} pulsemixer &"
|
|
||||||
:class "speaker"
|
|
||||||
(box
|
|
||||||
(label
|
|
||||||
:class "icon"
|
|
||||||
:text {volume.speaker_icon})
|
|
||||||
(label
|
|
||||||
:visible {!volume.speaker_mute}
|
|
||||||
:class "value"
|
|
||||||
:text "${volume.speaker_vol}%")
|
|
||||||
))
|
|
||||||
|
|
||||||
))
|
|
|
@ -1,11 +0,0 @@
|
||||||
; Consider making the window name clickable, opening up a full window that's showing
|
|
||||||
; the selected window details (class, unformatted name, and perhaps even more, like
|
|
||||||
; xwayland status, ...)
|
|
||||||
(defwidget window_name_module []
|
|
||||||
(box
|
|
||||||
:class "module window_name"
|
|
||||||
|
|
||||||
(label
|
|
||||||
:class "value"
|
|
||||||
:text "${window_name.formatted_name}")
|
|
||||||
))
|
|
|
@ -1,21 +0,0 @@
|
||||||
; (defwidget sep []
|
|
||||||
; (label :class "separ module" :text "|"))
|
|
||||||
|
|
||||||
|
|
||||||
; Consider making the window name clickable, opening up a full window that's showing
|
|
||||||
; the selected window details (class, unformatted name, and perhaps even more, like
|
|
||||||
; xwayland status, ...)
|
|
||||||
(defwidget workspaces_module []
|
|
||||||
(box
|
|
||||||
:class "module workspaces"
|
|
||||||
|
|
||||||
(for workspace in workspaces
|
|
||||||
(eventbox
|
|
||||||
:class {workspace.active ? 'focused' : workspace.windows > 0 ? 'active' : 'inactive'}
|
|
||||||
:onclick `scripts/workspaces --switch ${workspace.id}`
|
|
||||||
|
|
||||||
(label
|
|
||||||
:class "value icon"
|
|
||||||
:text {workspace.format_name}))
|
|
||||||
)
|
|
||||||
))
|
|
|
@ -1,11 +0,0 @@
|
||||||
[flake8]
|
|
||||||
max-line-length=119
|
|
||||||
extend-ignore=E203
|
|
||||||
extend-select=B902,B904
|
|
||||||
exclude=.venv,.git,.cache
|
|
||||||
ignore=
|
|
||||||
ANN002, # *args annotation
|
|
||||||
ANN003, # **kwargs annotation
|
|
||||||
ANN101, # self param annotation
|
|
||||||
ANN102, # cls param annotation
|
|
||||||
ANN204, # return type annotation for special methods
|
|
|
@ -1,85 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# shellcheck source=include
|
|
||||||
source "./scripts/include"
|
|
||||||
|
|
||||||
# $BATTERY and $ADAPTER env vars can be set manually, being the names of the
|
|
||||||
# devices (in /sys/class/power_supply/) i.e. BATTERY=BAT0 ADAPTER=ADP0
|
|
||||||
# or, if left unset, they will be automatically picked.
|
|
||||||
|
|
||||||
CAPACITY_ICONS=("" "" "" "" "" "" "" "" "" "")
|
|
||||||
CHARGING_ICON=""
|
|
||||||
DISCHARGING_ICON=""
|
|
||||||
FULL_ICON="" # Plugged in, but no longer charging (fully charged)
|
|
||||||
CRITICAL_ICON=""
|
|
||||||
CRITICAL_PERCENTAGE=15
|
|
||||||
|
|
||||||
if [ -z "$BATTERY" ]; then
|
|
||||||
# shellcheck disable=SC2010
|
|
||||||
BATTERY="$(\ls -t /sys/class/power_supply | grep "BAT" | head -n 1)"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "$ADAPTER" ]; then
|
|
||||||
# shellcheck disable=SC2010
|
|
||||||
ADAPTER="$(\ls -t /sys/class/power_supply | grep -E "ADP|AC" | head -n 1)"
|
|
||||||
fi
|
|
||||||
|
|
||||||
get_bat_info() {
|
|
||||||
cat /sys/class/power_supply/"$BATTERY"/"$1"
|
|
||||||
}
|
|
||||||
|
|
||||||
get_adp_info() {
|
|
||||||
cat /sys/class/power_supply/"$ADAPTER"/"$1"
|
|
||||||
}
|
|
||||||
|
|
||||||
manufacturer="$(get_bat_info manufacturer)"
|
|
||||||
model_name="$(get_bat_info model_name)"
|
|
||||||
technology="$(get_bat_info technology)"
|
|
||||||
energy_now="$(get_bat_info energy_now)"
|
|
||||||
energy_full="$(get_bat_info energy_full)"
|
|
||||||
energy_full_design="$(get_bat_info energy_full_design)"
|
|
||||||
cycle_count="$(get_bat_info cycle_count)"
|
|
||||||
|
|
||||||
capacity="$(get_bat_info capacity)"
|
|
||||||
status="$(get_bat_info status)"
|
|
||||||
[ "$(get_adp_info online)" -eq 1 ] && adp_connected="true" || adp_connected="false"
|
|
||||||
|
|
||||||
# Quick overrides to showcase how battery works
|
|
||||||
# capacity=100
|
|
||||||
# adp_connected="true"
|
|
||||||
# status="Charging"
|
|
||||||
# status="Not charging"
|
|
||||||
# status="Discharging"
|
|
||||||
|
|
||||||
full="false"
|
|
||||||
capacity_icon="$(pick_icon "$capacity" 0 100 "${CAPACITY_ICONS[@]}")"
|
|
||||||
|
|
||||||
if [ "$status" = "Not charging" ] || [ "$status" = "Full" ] && [ "$adp_connected" = "true" ]; then
|
|
||||||
extra_icon="$FULL_ICON"
|
|
||||||
full="true"
|
|
||||||
elif [ "$status" = "Discharging" ] && [ "$capacity" -le "$CRITICAL_PERCENTAGE" ]; then
|
|
||||||
extra_icon="$CRITICAL_ICON"
|
|
||||||
elif [ "$status" = "Discharging" ]; then
|
|
||||||
extra_icon="$DISCHARGING_ICON"
|
|
||||||
elif [ "$status" = "Charging" ]; then
|
|
||||||
extra_icon="$CHARGING_ICON"
|
|
||||||
fi
|
|
||||||
|
|
||||||
[ "$capacity" -le "$CRITICAL_PERCENTAGE" ] && critical="true" || critical="false"
|
|
||||||
|
|
||||||
jq -n -c --monochrome-output \
|
|
||||||
--arg percent "$capacity" \
|
|
||||||
--arg plugged "$adp_connected" \
|
|
||||||
--arg status "$status" \
|
|
||||||
--arg capacity_icon "$capacity_icon" \
|
|
||||||
--arg extra_icon "$extra_icon" \
|
|
||||||
--arg manufacturer "$manufacturer" \
|
|
||||||
--arg model_name "$model_name" \
|
|
||||||
--arg technology "$technology" \
|
|
||||||
--arg energy_now "$energy_now" \
|
|
||||||
--arg energy_full "$energy_full" \
|
|
||||||
--arg energy_full_design "$energy_full_design" \
|
|
||||||
--arg cycle_count "$cycle_count" \
|
|
||||||
--arg critical "$critical" \
|
|
||||||
--arg full "$full" \
|
|
||||||
'$ARGS.named'
|
|
|
@ -1,85 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
ICON_IDLE=""
|
|
||||||
ICON_CONNECTED=""
|
|
||||||
ICON_OFF=""
|
|
||||||
|
|
||||||
toggle() {
|
|
||||||
status=$(rfkill -J | jq -r '.rfkilldevices[] | select(.type == "bluetooth") | .soft' | head -1)
|
|
||||||
|
|
||||||
if [ "$status" = "unblocked" ]; then
|
|
||||||
rfkill block bluetooth
|
|
||||||
else
|
|
||||||
rfkill unblock bluetooth
|
|
||||||
if ! systemctl -q is-active bluetooth.service; then
|
|
||||||
# This will use polkit for privillege elevation
|
|
||||||
systemctl start bluetooth
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
get_report() {
|
|
||||||
status=$(rfkill -J | jq -r '.rfkilldevices[] | select(.type == "bluetooth") | .soft' | head -1)
|
|
||||||
if [ "$status" = "blocked" ] || ! systemctl -q is-active bluetooth.service || ! command -v bluetoothctl >/dev/null 2>&1; then
|
|
||||||
jq -n -c --monochrome-output \
|
|
||||||
--arg icon "$ICON_OFF" \
|
|
||||||
--arg status "unknown" \
|
|
||||||
--arg name "" \
|
|
||||||
--arg mac "" \
|
|
||||||
--arg battery "" \
|
|
||||||
'$ARGS.named'
|
|
||||||
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
status="$(bluetoothctl show)"
|
|
||||||
|
|
||||||
powered="$(echo "$status" | grep Powered | cut -d' ' -f 2-)"
|
|
||||||
if [ "$powered" != "yes" ]; then
|
|
||||||
jq -n -c --monochrome-output \
|
|
||||||
--arg icon "$ICON_OFF" \
|
|
||||||
--arg status "unpowered" \
|
|
||||||
--arg name "" \
|
|
||||||
--arg mac "" \
|
|
||||||
--arg battery "" \
|
|
||||||
'$ARGS.named'
|
|
||||||
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
status="$(bluetoothctl info)"
|
|
||||||
if [ "$status" == "Missing device address argument" ]; then
|
|
||||||
jq -n -c --monochrome-output \
|
|
||||||
--arg icon "$ICON_IDLE" \
|
|
||||||
--arg status "idle" \
|
|
||||||
--arg name "" \
|
|
||||||
--arg mac "" \
|
|
||||||
--arg battery "" \
|
|
||||||
'$ARGS.named'
|
|
||||||
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
name="$(echo "$status" | grep Name | cut -d' ' -f 2-)"
|
|
||||||
mac="$(echo "$status" | head -1 | awk '{print $2}' | tr ':' '_')"
|
|
||||||
|
|
||||||
if [ "$(echo "$status" | grep Percentage)" != "" ] && command -v upower >/dev/null 2>&1; then
|
|
||||||
battery="$(upower -i /org/freedesktop/UPower/devices/headset_dev_"$mac" | grep percentage | awk '{print $2}' | cut -f 1 -d '%')%"
|
|
||||||
else
|
|
||||||
battery=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
jq -n -c --monochrome-output \
|
|
||||||
--arg icon "$ICON_CONNECTED" \
|
|
||||||
--arg status "connected" \
|
|
||||||
--arg name "$name" \
|
|
||||||
--arg mac "$mac" \
|
|
||||||
--arg battery "$battery" \
|
|
||||||
'$ARGS.named'
|
|
||||||
}
|
|
||||||
|
|
||||||
case "$1" in
|
|
||||||
"status") get_report ;;
|
|
||||||
"toggle") toggle ;;
|
|
||||||
*) >&2 echo "Invalid usage, argument '$1' not recognized."; exit 1 ;;
|
|
||||||
esac
|
|
|
@ -1,82 +0,0 @@
|
||||||
#!/bin/env bash
|
|
||||||
|
|
||||||
if [ "$1" = "temperature" ]; then
|
|
||||||
watch_cmd="{t}"
|
|
||||||
update_cmd="UpdateTemperature"
|
|
||||||
update_signature="n"
|
|
||||||
set_cmd="Temperature"
|
|
||||||
set_signature="q"
|
|
||||||
default_val=6500
|
|
||||||
click_val=4500
|
|
||||||
scroll_change=100
|
|
||||||
cmp_op="<"
|
|
||||||
|
|
||||||
elif [ "$1" = "brightness" ]; then
|
|
||||||
watch_cmd="{bp}"
|
|
||||||
update_cmd="UpdateBrightness"
|
|
||||||
update_signature="d"
|
|
||||||
set_cmd="Brightness"
|
|
||||||
set_signature="d"
|
|
||||||
default_val=1
|
|
||||||
click_val=0.8
|
|
||||||
scroll_change=0.02
|
|
||||||
cmp_op="<"
|
|
||||||
|
|
||||||
elif [ "$1" = "gamma" ]; then
|
|
||||||
watch_cmd="{g}"
|
|
||||||
update_cmd="UpdateGamma"
|
|
||||||
update_signature="d"
|
|
||||||
set_cmd="Gamma"
|
|
||||||
set_signature="d"
|
|
||||||
default_val=1
|
|
||||||
click_val=1.1
|
|
||||||
scroll_change=0.02
|
|
||||||
cmp_op=">"
|
|
||||||
|
|
||||||
else
|
|
||||||
>&2 echo "Invalid option, first argument must be one of: temperature, brightness, gamma"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$2" = "watch" ]; then
|
|
||||||
exec wl-gammarelay-rs watch "$watch_cmd"
|
|
||||||
|
|
||||||
elif [ "$2" = "get" ]; then
|
|
||||||
exec busctl --user get-property rs.wl-gammarelay / rs.wl.gammarelay "$set_cmd" | cut -d' ' -f2
|
|
||||||
|
|
||||||
elif [ "$2" = "scroll" ]; then
|
|
||||||
if [ "$3" = "up" ]; then
|
|
||||||
sign="+"
|
|
||||||
elif [ "$3" = "down" ]; then
|
|
||||||
sign="-"
|
|
||||||
else
|
|
||||||
>&2 echo "Invalid sign, second argument must be one of: up, down"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
exec busctl --user -- call rs.wl-gammarelay / rs.wl.gammarelay "$update_cmd" "$update_signature" ${sign}${scroll_change}
|
|
||||||
|
|
||||||
elif [ "$2" = "set" ]; then
|
|
||||||
mode="$3"
|
|
||||||
if [ "$mode" = "toggle" ]; then
|
|
||||||
cur_val="$(busctl --user get-property rs.wl-gammarelay / rs.wl.gammarelay "$set_cmd" | cut -d' ' -f2)"
|
|
||||||
if [ "$(echo "$cur_val $cmp_op $default_val" | bc -l)" = "1" ]; then
|
|
||||||
mode="off"
|
|
||||||
else
|
|
||||||
mode="on"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$mode" = "on" ]; then
|
|
||||||
exec busctl --user -- set-property rs.wl-gammarelay / rs.wl.gammarelay "$set_cmd" "$set_signature" "$click_val"
|
|
||||||
elif [ "$mode" = "off" ]; then
|
|
||||||
exec busctl --user -- set-property rs.wl-gammarelay / rs.wl.gammarelay "$set_cmd" "$set_signature" "$default_val"
|
|
||||||
else
|
|
||||||
>&2 echo "Invalid mode, third argument, must be one of: toggle, on, off"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
else
|
|
||||||
>&2 echo "Invalid operation, second argument must be one of: watch, scroll, set"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
|
@ -1,50 +0,0 @@
|
||||||
#!/bin/env bash
|
|
||||||
|
|
||||||
# $1: Current number
|
|
||||||
# $2: Range minimum
|
|
||||||
# $3: Range maximum
|
|
||||||
# $4-: Icons as individual arguments
|
|
||||||
pick_icon() {
|
|
||||||
cur="$1"
|
|
||||||
min="$2"
|
|
||||||
max="$3"
|
|
||||||
shift 3
|
|
||||||
icons=("$@")
|
|
||||||
|
|
||||||
index="$(echo "($cur-$min)/(($max-$min)/${#icons[@]})" | bc)"
|
|
||||||
|
|
||||||
# Print the picked icon, handling overflows/underflows, i.e. if our index is <0 or >len(icons)
|
|
||||||
if [ "$index" -ge "${#icons[@]}" ]; then
|
|
||||||
index=-1
|
|
||||||
elif [ "$index" -lt 0 ]; then
|
|
||||||
index=0
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "${icons[index]}"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Will block and listen to the hyprland socket messages and output them
|
|
||||||
# Generally used like: hyprland_ipc | while read line; do handle $line; done
|
|
||||||
# Read <https://wiki.hyprland.org/IPC/> for output format and available events
|
|
||||||
# Note: requires openbsd version of netcat.
|
|
||||||
# $1 - Optional event to listen for (no event filtering will be done if not provided)
|
|
||||||
hyprland_ipc() {
|
|
||||||
if [ -z "$HYPRLAND_INSTANCE_SIGNATURE" ]; then
|
|
||||||
>&2 echo "Hyprland is not running, IPC not available"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
SOCKET_PATH="${XDG_RUNTIME_DIR:-/run/user/$UID}/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock"
|
|
||||||
#SOCKET_PATH="/tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock"
|
|
||||||
|
|
||||||
if [ -z "$1" ]; then
|
|
||||||
nc -U "$SOCKET_PATH" | while read -r test; do
|
|
||||||
echo "$test"
|
|
||||||
done
|
|
||||||
else
|
|
||||||
nc -U "$SOCKET_PATH" | while read -r test; do
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
echo "$test" | grep --line-buffered -E "^$1>>" | stdbuf -oL awk -F '>>' '{print $2}'
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
}
|
|
|
@ -1,52 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# shellcheck source=include
|
|
||||||
source "./scripts/include"
|
|
||||||
|
|
||||||
STRENGTH_ICONS=("" "" "" "" "" "")
|
|
||||||
DISCONNECTED_ICON=""
|
|
||||||
WIFI_OFF=""
|
|
||||||
|
|
||||||
toggle() {
|
|
||||||
status=$(rfkill -J | jq -r '.rfkilldevices[] | select(.type == "wlan") | .soft' | head -1)
|
|
||||||
|
|
||||||
if [ "$status" = "unblocked" ]; then
|
|
||||||
rfkill block wlan
|
|
||||||
else
|
|
||||||
rfkill unblock wlan
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
get_report() {
|
|
||||||
connection_details="$(nmcli -t -f NAME,TYPE,DEVICE connection show --active | grep wireless | head -n1)"
|
|
||||||
essid="$(echo $connection_details | cut -d':' -f1)"
|
|
||||||
device="$(echo $connection_details | cut -d':' -f3)"
|
|
||||||
if [ -n "$device" ]; then
|
|
||||||
state="$(nmcli -t -f DEVICE,STATE device status | grep "$device" | head -n1 | cut -d':' -f2)"
|
|
||||||
signal="$(nmcli -t -f in-use,signal dev wifi | grep "\*" | cut -d':' -f2)"
|
|
||||||
else
|
|
||||||
state="unknown"
|
|
||||||
signal="0"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$state" = "disconnected" ] ; then
|
|
||||||
icon="$DISCONNECTED_ICON"
|
|
||||||
elif [ "$state" = "unknown" ]; then
|
|
||||||
icon="$WIFI_OFF"
|
|
||||||
else
|
|
||||||
icon="$(pick_icon "$signal" 0 100 "${STRENGTH_ICONS[@]}")"
|
|
||||||
fi
|
|
||||||
|
|
||||||
jq -n -c --monochrome-output \
|
|
||||||
--arg essid "$essid" \
|
|
||||||
--arg icon "$icon" \
|
|
||||||
--arg state "$state" \
|
|
||||||
--arg signal "$signal" \
|
|
||||||
'$ARGS.named'
|
|
||||||
}
|
|
||||||
|
|
||||||
case "$1" in
|
|
||||||
"toggle") toggle ;;
|
|
||||||
"status") get_report ;;
|
|
||||||
*) >&2 echo "Invalid usage, argument '$1' not recognized."; exit 1 ;;
|
|
||||||
esac
|
|
|
@ -1,12 +0,0 @@
|
||||||
#!/bin/env bash
|
|
||||||
|
|
||||||
# shellcheck source=include
|
|
||||||
source "./scripts/include"
|
|
||||||
|
|
||||||
# Consider usning a file as a flag for whether nightlight is on or off
|
|
||||||
# as we might be in transition state and just killing the program might
|
|
||||||
# not be enough.
|
|
||||||
|
|
||||||
if [ "$1" = "toggle" ]; then
|
|
||||||
gammastep -x
|
|
||||||
fi
|
|
|
@ -1,12 +0,0 @@
|
||||||
[tool.black]
|
|
||||||
line-length = 119
|
|
||||||
extend-exclude = "^/.cache"
|
|
||||||
|
|
||||||
[tool.isort]
|
|
||||||
profile = "black"
|
|
||||||
line_length = 119
|
|
||||||
atomic = true
|
|
||||||
order_by_type = false
|
|
||||||
case_sensitive = true
|
|
||||||
combine_as_imports = true
|
|
||||||
skip = [".venv", ".git", ".cache"]
|
|
|
@ -1,35 +0,0 @@
|
||||||
#!/bin/env bash
|
|
||||||
|
|
||||||
MOUNTPOINTS=("/" "/mnt/ext")
|
|
||||||
|
|
||||||
data="$(df -H)"
|
|
||||||
|
|
||||||
as_json() {
|
|
||||||
mountpoint="$1"
|
|
||||||
res="$2"
|
|
||||||
arr_res=($res)
|
|
||||||
|
|
||||||
jq -n -c --monochrome-output \
|
|
||||||
--arg mountpoint "$mountpoint" \
|
|
||||||
--arg size "${arr_res[0]}" \
|
|
||||||
--arg used "${arr_res[1]}" \
|
|
||||||
--arg avail "${arr_res[2]}" \
|
|
||||||
--arg percent "${arr_res[3]}" \
|
|
||||||
'$ARGS.named'
|
|
||||||
}
|
|
||||||
|
|
||||||
output_json="[]"
|
|
||||||
for mountpoint in "${MOUNTPOINTS[@]}"; do
|
|
||||||
res="$(echo "$data" | awk -v m="$mountpoint" '$6 == m {print $2 " " $3 " " $4 " " $5}')"
|
|
||||||
out="$(as_json "$mountpoint" "$res")"
|
|
||||||
|
|
||||||
# echo "$output_json $out" | jq -c -s
|
|
||||||
|
|
||||||
jq --argjson arr1 "$output_json" --argjson arr2 "[$out]" -n \
|
|
||||||
'$arr1 + $arr2'
|
|
||||||
|
|
||||||
# mount_data+=("$mountpoint" $res)
|
|
||||||
# echo "${mount_data[@]}"
|
|
||||||
done
|
|
||||||
|
|
||||||
# echo "${mount_data[@]}"
|
|
|
@ -1,7 +0,0 @@
|
||||||
#!/bin/env bash
|
|
||||||
|
|
||||||
# shellcheck source=include
|
|
||||||
source "./scripts/include"
|
|
||||||
|
|
||||||
#hyprland_ipc "workspace|createworkspace|destroyworkspace|activewindow"
|
|
||||||
hyprland_ipc
|
|
|
@ -1,112 +0,0 @@
|
||||||
#!/bin/env bash
|
|
||||||
|
|
||||||
# Define some icons
|
|
||||||
SPEAKER_ICONS=("" "" "")
|
|
||||||
SPEAKER_MUTED_ICON=""
|
|
||||||
MIC_ICON=""
|
|
||||||
MIC_MUTED_ICON=""
|
|
||||||
|
|
||||||
# Define some helper functions for getting/setting audio data using wireplumber (wpctl)
|
|
||||||
|
|
||||||
# $1 can either be "SINK" (speaker) or "SOURCE" (microphone)
|
|
||||||
get_vol() {
|
|
||||||
wpctl get-volume "@DEFAULT_AUDIO_${1}@" | awk '{print int($2*100)}'
|
|
||||||
}
|
|
||||||
|
|
||||||
# $1 can either be "SINK" (speaker) or "SOURCE" (microphone)
|
|
||||||
# #2 is the voulme (as percentage) to set the volume to
|
|
||||||
# $3 is optional, if set, it can be '+' or '-', which then adds/decreases volume, instead of setting
|
|
||||||
set_vol() {
|
|
||||||
wpctl set-volume "@DEFAULT_AUDIO_${1}@" "$(awk -v n="$2" 'BEGIN{print (n / 100)}')$3"
|
|
||||||
}
|
|
||||||
|
|
||||||
# $1 can either be "SINK" (speaker) or "SOURCE" (microphone)
|
|
||||||
check_mute() {
|
|
||||||
wpctl get-volume "@DEFAULT_AUDIO_${1}@" | grep -i muted >/dev/null
|
|
||||||
echo $?
|
|
||||||
}
|
|
||||||
|
|
||||||
# $1 can either be "SINK" (speaker) or "SOURCE" (microphone)
|
|
||||||
toggle_mute() {
|
|
||||||
wpctl set-mute "@DEFAULT_AUDIO_${1}@" toggle
|
|
||||||
}
|
|
||||||
|
|
||||||
get_report() {
|
|
||||||
spkr_vol="$(get_vol "SINK")"
|
|
||||||
mic_vol="$(get_vol "SOURCE")"
|
|
||||||
|
|
||||||
if [ "$(check_mute "SINK")" == "0" ]; then
|
|
||||||
spkr_mute="true"
|
|
||||||
spkr_icon="$SPEAKER_MUTED_ICON"
|
|
||||||
else
|
|
||||||
spkr_mute="false"
|
|
||||||
index="$(awk -v n="$spkr_vol" -v m="${#SPEAKER_ICONS[@]}" 'BEGIN{print int(n/(100/m))}')"
|
|
||||||
|
|
||||||
# We might end up with an higher than the length of icons, if the volume is over 100%
|
|
||||||
# in this case, set the index to last icon
|
|
||||||
if [ "$index" -ge "${#SPEAKER_ICONS[@]}" ]; then
|
|
||||||
spkr_icon="${SPEAKER_ICONS[-1]}"
|
|
||||||
else
|
|
||||||
spkr_icon="${SPEAKER_ICONS[$index]}"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$(check_mute "SOURCE")" = "0" ]; then
|
|
||||||
mic_mute="true"
|
|
||||||
mic_icon="$MIC_MUTED_ICON"
|
|
||||||
else
|
|
||||||
mic_mute="false"
|
|
||||||
mic_icon="$MIC_ICON"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "{ \"speaker_vol\": \"$spkr_vol\", \"speaker_mute\": $spkr_mute, \"speaker_icon\": \"$spkr_icon\", \"microphone_mute\": $mic_mute, \"microphone_vol\": \"$mic_vol\", \"microphone_icon\": \"$mic_icon\" }"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Continually run and report every volume change (into stdout)
|
|
||||||
loop() {
|
|
||||||
get_report
|
|
||||||
pactl subscribe | grep --line-buffered "change" | while read -r _; do
|
|
||||||
get_report
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
case "$1" in
|
|
||||||
"loop") loop ;;
|
|
||||||
|
|
||||||
"once") get_report ;;
|
|
||||||
|
|
||||||
"togglemute")
|
|
||||||
if [ "$2" != "SOURCE" ] && [ "$2" != "SINK" ]; then
|
|
||||||
>&2 echo "Invalid usage, expected second argument to be 'SINK' or 'SOURCE', got '$2'"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
toggle_mute "$2"
|
|
||||||
;;
|
|
||||||
|
|
||||||
"setvol")
|
|
||||||
if [ "$2" != "SOURCE" ] && [ "$2" != "SINK" ]; then
|
|
||||||
>&2 echo "Invalid usage, expected second argument to be 'SINK' or 'SOURCE', got '$2'"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "$3" =~ ^[+-]?[0-9]*\.?[0-9]+$ ]]; then
|
|
||||||
case "$4" in
|
|
||||||
"") set_vol "$2" "$3" ;;
|
|
||||||
up | +) set_vol "$2" "$3" "+" ;;
|
|
||||||
down | -) set_vol "$2" "$3" "-" ;;
|
|
||||||
*)
|
|
||||||
>&2 echo "Invalid usage, expected fourth argument to be up/down or +/-, got '$4'"
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
else
|
|
||||||
>&2 echo "Invalid usage, exepcted third argument to be a number, got '$3'"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
|
|
||||||
*)
|
|
||||||
>&2 echo "Invalid usage, argument '$1' not recognized."
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
|
@ -1,6 +0,0 @@
|
||||||
#!/bin/env bash
|
|
||||||
|
|
||||||
# shellcheck source=include
|
|
||||||
source "./scripts/include"
|
|
||||||
|
|
||||||
hyprland_ipc "activewindow" | ./scripts/window_name.py
|
|
|
@ -1,112 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
"""This is a utility script for regex remaps on window names.
|
|
||||||
|
|
||||||
This is done in python, because of the complex regex logic, which would be pretty hard to
|
|
||||||
recreate in bash. This python script is expected to be called from the bash script controlling
|
|
||||||
the window names. Window name and class are obtained from piped stdin, to prevent having to
|
|
||||||
needlessly keep restarting this program, which takes a while due to the interpreter starting
|
|
||||||
overhead.
|
|
||||||
"""
|
|
||||||
import json
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
from typing import Iterator, Optional
|
|
||||||
|
|
||||||
|
|
||||||
class RemapRule:
|
|
||||||
__slots__ = ("name_pattern", "output_pattern", "class_pattern")
|
|
||||||
|
|
||||||
def __init__(
|
|
||||||
self,
|
|
||||||
name_pattern: str,
|
|
||||||
output_pattern: str,
|
|
||||||
class_pattern: Optional[str] = None,
|
|
||||||
):
|
|
||||||
self.name_pattern = re.compile(name_pattern)
|
|
||||||
self.output_pattern = output_pattern
|
|
||||||
self.class_pattern = re.compile(class_pattern) if class_pattern else None
|
|
||||||
|
|
||||||
def apply(self, window_name: str, window_class: str) -> str:
|
|
||||||
"""Returns new name after this remap rule was applied."""
|
|
||||||
if self.class_pattern is not None:
|
|
||||||
if not self.class_pattern.fullmatch(window_class):
|
|
||||||
# Rule doesn't apply, class mismatch, return original name
|
|
||||||
return window_name
|
|
||||||
|
|
||||||
res = self.name_pattern.fullmatch(window_name)
|
|
||||||
if not res:
|
|
||||||
# Rule doesn't apply, name mismatch, return original name
|
|
||||||
return window_name
|
|
||||||
|
|
||||||
# NOTE: This is potentially unsafe, since output_pattern might be say {0.__class__}, etc.
|
|
||||||
# meaning this allows arbitrary attribute access, however it doesn't allow running functions
|
|
||||||
# here. That said, code could still end up being run if there's some descriptor defined,
|
|
||||||
# and generally I wouldn't trust this in production. However, this code is for my personal
|
|
||||||
# use here, and all of the output patterns are hard-coded in this file, so in this case, it's
|
|
||||||
# fine. But if you see this code and you'd like to use it in your production code, maybe don't
|
|
||||||
return self.output_pattern.format(*res.groups())
|
|
||||||
|
|
||||||
|
|
||||||
# Rules will be applied in specified order
|
|
||||||
REMAP_RULES: list[RemapRule] = [
|
|
||||||
RemapRule(r"", "", ""),
|
|
||||||
RemapRule(r"(.*) — Mozilla Firefox", " {}", "firefox"),
|
|
||||||
RemapRule(r"Mozilla Firefox", " Mozilla Firefox", "firefox"),
|
|
||||||
RemapRule(r"Alacritty", " Alacritty", "Alacritty"),
|
|
||||||
RemapRule(
|
|
||||||
r"zsh;#toggleterm#1 - \(term:\/\/(.+)\/\/(\d+):(.+)\) - N?VIM",
|
|
||||||
" Terminal: {0}",
|
|
||||||
),
|
|
||||||
RemapRule(r"(.+) \+ \((.+)\) - N?VIM", " {0} ({1}) [MODIFIED]"),
|
|
||||||
RemapRule(r"(.+) \((.+)\) - N?VIM", " {0} ({1})"),
|
|
||||||
RemapRule(r"(?:\[\d+\] )?\*?WebCord - (.+)", " {}", "WebCord"),
|
|
||||||
RemapRule(r"(.+) - Discord", " {}", "discord"),
|
|
||||||
RemapRule(r"(?:\(\d+\) )?Discord \| (.+)", " {}", "vesktop"),
|
|
||||||
RemapRule(r"(.+) - mpv", " {}", "mpv"),
|
|
||||||
RemapRule(r"Stremio - (.+)", " Stremio - {}", r"(Stremio)|(com.stremio.stremio)"),
|
|
||||||
RemapRule(r"Spotify", " Spotify", "Spotify"),
|
|
||||||
RemapRule(r"pulsemixer", " Pulsemixer"),
|
|
||||||
RemapRule(r"(.*)", " {}", "Pcmanfm"),
|
|
||||||
RemapRule(r"(.*)", " {}", "pcmanfm-qt"),
|
|
||||||
# Needs to be last
|
|
||||||
RemapRule(r"(.*)", " {}", "kitty"),
|
|
||||||
]
|
|
||||||
|
|
||||||
MAX_LENGTH = 65
|
|
||||||
|
|
||||||
|
|
||||||
def iter_window() -> Iterator[tuple[str, str]]:
|
|
||||||
"""Listen for the window parameters from stdin/pipe, yields (window_name, window_class)."""
|
|
||||||
for line in sys.stdin:
|
|
||||||
line = line.removesuffix("\n")
|
|
||||||
els = line.split(",", maxsplit=1)
|
|
||||||
if len(els) != 2:
|
|
||||||
raise ValueError(f"Expected 2 arguments from stdin line (name, class), but got {len(els)}")
|
|
||||||
yield els[1], els[0]
|
|
||||||
|
|
||||||
|
|
||||||
def main() -> None:
|
|
||||||
for window_name, window_class in iter_window():
|
|
||||||
formatted_name = window_name
|
|
||||||
for remap_rule in REMAP_RULES:
|
|
||||||
new_name = remap_rule.apply(formatted_name, window_class)
|
|
||||||
if new_name != formatted_name:
|
|
||||||
formatted_name = new_name
|
|
||||||
break
|
|
||||||
|
|
||||||
if len(formatted_name) > MAX_LENGTH:
|
|
||||||
formatted_name = formatted_name[: MAX_LENGTH - 3] + "..."
|
|
||||||
|
|
||||||
ret = json.dumps(
|
|
||||||
{
|
|
||||||
"name": window_name,
|
|
||||||
"class": window_class,
|
|
||||||
"formatted_name": formatted_name,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
print(ret)
|
|
||||||
sys.stdout.flush()
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1,13 +0,0 @@
|
||||||
#!/bin/env bash
|
|
||||||
|
|
||||||
# shellcheck source=include
|
|
||||||
source "./scripts/include"
|
|
||||||
|
|
||||||
if [ "$1" = "--switch" ]; then
|
|
||||||
$HOME/.local/bin/scripts/gui/hyprland/swap-workspace "$2" >/dev/null
|
|
||||||
# hyprctl dispatch workspace "$2" >/dev/null
|
|
||||||
elif [ "$1" = "--loop" ]; then
|
|
||||||
hyprland_ipc "workspace|createworkspace|destroyworkspace" | ./scripts/workspaces.py "$@"
|
|
||||||
else
|
|
||||||
./scripts/workspaces.py "$@"
|
|
||||||
fi
|
|
|
@ -1,188 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
import argparse
|
|
||||||
import json
|
|
||||||
import subprocess
|
|
||||||
import sys
|
|
||||||
from typing import TypedDict, TYPE_CHECKING
|
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
|
||||||
from _typeshed import SupportsRichComparison
|
|
||||||
|
|
||||||
|
|
||||||
class WorkspaceInfo(TypedDict):
|
|
||||||
id: int
|
|
||||||
name: str
|
|
||||||
monitor: str
|
|
||||||
windows: int
|
|
||||||
hasfullscreen: bool
|
|
||||||
lastwindow: str
|
|
||||||
lastwindowtitle: str
|
|
||||||
|
|
||||||
|
|
||||||
class ActiveWorkspaceInfo(TypedDict):
|
|
||||||
id: int
|
|
||||||
name: str
|
|
||||||
|
|
||||||
|
|
||||||
class MonitorInfo(TypedDict):
|
|
||||||
id: int
|
|
||||||
name: str
|
|
||||||
description: str
|
|
||||||
make: str
|
|
||||||
model: str
|
|
||||||
width: int
|
|
||||||
height: int
|
|
||||||
refreshRate: float
|
|
||||||
x: int
|
|
||||||
y: int
|
|
||||||
activeWorkspace: ActiveWorkspaceInfo
|
|
||||||
reserved: list[int]
|
|
||||||
scale: float
|
|
||||||
transform: int
|
|
||||||
focused: bool
|
|
||||||
dpmsStatus: bool
|
|
||||||
vrr: bool
|
|
||||||
|
|
||||||
|
|
||||||
class OutputWorkspaceInfo(WorkspaceInfo):
|
|
||||||
format_name: str
|
|
||||||
active: bool
|
|
||||||
monitor_id: int
|
|
||||||
|
|
||||||
|
|
||||||
# workspace id -> remapped name
|
|
||||||
REMAPS = {
|
|
||||||
1: "",
|
|
||||||
2: "",
|
|
||||||
3: "",
|
|
||||||
4: "",
|
|
||||||
5: "",
|
|
||||||
6: "",
|
|
||||||
7: "7",
|
|
||||||
8: "8",
|
|
||||||
9: "9",
|
|
||||||
}
|
|
||||||
|
|
||||||
# Skip the special (scratchpad) workspace
|
|
||||||
SKIP = {-99}
|
|
||||||
|
|
||||||
|
|
||||||
def workspace_sort(obj: OutputWorkspaceInfo) -> "SupportsRichComparison":
|
|
||||||
"""Returns a key to sort by, given the current element."""
|
|
||||||
return obj["id"]
|
|
||||||
|
|
||||||
|
|
||||||
def fill_blank_workspaces(open: list[OutputWorkspaceInfo]) -> list[OutputWorkspaceInfo]:
|
|
||||||
"""Add in the rest of the workspaces which don't have any open windows on them.
|
|
||||||
|
|
||||||
This is needed because hyprland deletes workspaces with nothing in them.
|
|
||||||
Note that this assumes all available workspaces were listed in REMAPS, and will
|
|
||||||
only fill those. These blank workspaces will have most string values set to "N/A",
|
|
||||||
and most int values set to 0.
|
|
||||||
"""
|
|
||||||
# Work on a copy, we don't want to alter the original list
|
|
||||||
lst = open.copy()
|
|
||||||
|
|
||||||
for remap_id, format_name in REMAPS.items():
|
|
||||||
# Skip for already present workspaces
|
|
||||||
if any(ws_info["id"] == remap_id for ws_info in lst):
|
|
||||||
continue
|
|
||||||
|
|
||||||
blank_ws: OutputWorkspaceInfo = {
|
|
||||||
"id": remap_id,
|
|
||||||
"name": str(remap_id),
|
|
||||||
"monitor": "N/A",
|
|
||||||
"windows": 0,
|
|
||||||
"hasfullscreen": False,
|
|
||||||
"lastwindow": "N/A",
|
|
||||||
"lastwindowtitle": "N/A",
|
|
||||||
"active": False,
|
|
||||||
"format_name": format_name,
|
|
||||||
"monitor_id": 0,
|
|
||||||
}
|
|
||||||
lst.append(blank_ws)
|
|
||||||
|
|
||||||
return lst
|
|
||||||
|
|
||||||
|
|
||||||
def get_workspaces() -> list[OutputWorkspaceInfo]:
|
|
||||||
"""Obtain workspaces from hyprctl, sort them and add format_name arg."""
|
|
||||||
proc = subprocess.run(["hyprctl", "workspaces", "-j"], stdout=subprocess.PIPE)
|
|
||||||
proc.check_returncode()
|
|
||||||
try:
|
|
||||||
workspaces: list[WorkspaceInfo] = json.loads(proc.stdout)
|
|
||||||
except json.JSONDecodeError:
|
|
||||||
sys.stderr.writelines([
|
|
||||||
"Error decoding json response from hyprctl, returning empty workspaces",
|
|
||||||
f"Actual captured output from hyprctl: {proc.stdout!r}"
|
|
||||||
])
|
|
||||||
sys.stderr.flush()
|
|
||||||
workspaces = []
|
|
||||||
|
|
||||||
proc = subprocess.run(["hyprctl", "monitors", "-j"], stdout=subprocess.PIPE)
|
|
||||||
proc.check_returncode()
|
|
||||||
monitors: list[MonitorInfo] = json.loads(proc.stdout)
|
|
||||||
|
|
||||||
active_workspaces = {monitor["activeWorkspace"]["id"] for monitor in monitors}
|
|
||||||
|
|
||||||
out: list[OutputWorkspaceInfo] = []
|
|
||||||
for workspace in workspaces:
|
|
||||||
if workspace["id"] in SKIP:
|
|
||||||
continue
|
|
||||||
format_name = REMAPS.get(workspace["id"], workspace["name"])
|
|
||||||
active = workspace["id"] in active_workspaces
|
|
||||||
try:
|
|
||||||
mon_id = [monitor["id"] for monitor in monitors if monitor["name"] == workspace["monitor"]][0]
|
|
||||||
except IndexError: # Sometimes workspace["monitor"] is "?", which doesn't match any monitor
|
|
||||||
mon_id = -1
|
|
||||||
out.append({**workspace, "format_name": format_name, "active": active, "monitor_id": mon_id})
|
|
||||||
|
|
||||||
out = fill_blank_workspaces(out)
|
|
||||||
out.sort(key=workspace_sort)
|
|
||||||
return out
|
|
||||||
|
|
||||||
|
|
||||||
def print_workspaces() -> None:
|
|
||||||
wks = get_workspaces()
|
|
||||||
ret = json.dumps(wks)
|
|
||||||
print(ret)
|
|
||||||
sys.stdout.flush()
|
|
||||||
|
|
||||||
|
|
||||||
def main() -> None:
|
|
||||||
parser = argparse.ArgumentParser()
|
|
||||||
parser.add_argument(
|
|
||||||
"--oneshot",
|
|
||||||
action="store_true",
|
|
||||||
help="Don't listen to stdout for updates, only run once and quit",
|
|
||||||
)
|
|
||||||
parser.add_argument(
|
|
||||||
"--loop",
|
|
||||||
action="store_true",
|
|
||||||
help="Listen to stdout input, once something is received, re-print workspaces"
|
|
||||||
)
|
|
||||||
args = parser.parse_args()
|
|
||||||
|
|
||||||
if args.loop and args.oneshot:
|
|
||||||
print("Can't use both --oneshot and --loop", file=sys.stdout)
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
if args.loop is None and args.oneshot is None:
|
|
||||||
print("No option specified!", file=sys.stdout)
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
# Print workspaces here immediately, we don't want to have to wait for the first
|
|
||||||
# update from stdin as we only receive those on actual workspace change.
|
|
||||||
print_workspaces()
|
|
||||||
|
|
||||||
if args.oneshot:
|
|
||||||
# We've already printed the workspaces once, we can exit now
|
|
||||||
return
|
|
||||||
|
|
||||||
# Reprint workspaces on each stdin update (flush)
|
|
||||||
for _ in sys.stdin:
|
|
||||||
print_workspaces()
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1,14 +0,0 @@
|
||||||
(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))
|
|
|
@ -1,78 +0,0 @@
|
||||||
(defwidget radio-menu-win []
|
|
||||||
(box
|
|
||||||
:class "radio-menu-box"
|
|
||||||
:space-evenly false
|
|
||||||
:orientation "v"
|
|
||||||
|
|
||||||
(box
|
|
||||||
:class "text-row"
|
|
||||||
:space-evenly false
|
|
||||||
(label
|
|
||||||
:class "title"
|
|
||||||
:text "Radio/Connections Panel"))
|
|
||||||
|
|
||||||
(box
|
|
||||||
:class "element-row"
|
|
||||||
|
|
||||||
(box
|
|
||||||
:class "wifi-box"
|
|
||||||
:space-evenly false
|
|
||||||
:orientation "v"
|
|
||||||
(box
|
|
||||||
:class "element icon"
|
|
||||||
:space-evenly false
|
|
||||||
:halign "center"
|
|
||||||
(button
|
|
||||||
:class "wifi-button"
|
|
||||||
:tooltip "${net.state} (strength: ${net.signal}%)"
|
|
||||||
:onclick "scripts/net toggle"
|
|
||||||
{net.icon})
|
|
||||||
(label
|
|
||||||
:class "separator"
|
|
||||||
:text "│")
|
|
||||||
(button
|
|
||||||
:class "wifi-arrow-btn"
|
|
||||||
:onclick "eww close radio-menu && nm-connection-editor &"
|
|
||||||
""))
|
|
||||||
(label
|
|
||||||
:text {net.essid}
|
|
||||||
:xalign 0.5
|
|
||||||
:limit-width 15))
|
|
||||||
|
|
||||||
(box
|
|
||||||
:class "bluetooth-box"
|
|
||||||
:space-evenly false
|
|
||||||
:orientation "v"
|
|
||||||
(box
|
|
||||||
:class "element icon"
|
|
||||||
:space-evenly false
|
|
||||||
:halign "center"
|
|
||||||
(button
|
|
||||||
:class "bluetooth-button"
|
|
||||||
:onclick "scripts/bluetooth toggle"
|
|
||||||
:tooltip "${bluetooth.name} (${bluetooth.mac}) ${bluetooth.battery}"
|
|
||||||
{bluetooth.icon})
|
|
||||||
(label
|
|
||||||
:class "separator"
|
|
||||||
:text "│")
|
|
||||||
(button
|
|
||||||
:class "bluetooth-arrow-btn"
|
|
||||||
:onclick "eww close radio-menu && blueberry"
|
|
||||||
""))
|
|
||||||
(label
|
|
||||||
:text {bluetooth.name}
|
|
||||||
:xalign 0.5
|
|
||||||
:tooltip "${bluetooth.name} (${bluetooth.mac}) ${bluetooth.battery}"
|
|
||||||
:limit-width 15)))
|
|
||||||
))
|
|
||||||
|
|
||||||
(defwindow radio-menu
|
|
||||||
:stacking "fg"
|
|
||||||
:monitor 0
|
|
||||||
:geometry (geometry
|
|
||||||
:x "0"
|
|
||||||
:y "0"
|
|
||||||
:width "0%"
|
|
||||||
:height "0%"
|
|
||||||
:anchor "right top")
|
|
||||||
(radio-menu-win))
|
|
|
@ -1,62 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
osConfig,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
inherit (lib) mkIf;
|
|
||||||
|
|
||||||
cfg = osConfig.myOptions.home-manager.programs.bars.eww;
|
|
||||||
in {
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
programs.eww = {
|
|
||||||
enable = true;
|
|
||||||
configDir = ./config;
|
|
||||||
};
|
|
||||||
|
|
||||||
systemd.user.services = {
|
|
||||||
"eww" = {
|
|
||||||
Unit = {
|
|
||||||
Description = "ElKowar's Wacky Widgets (eww) daemon";
|
|
||||||
After = [ "graphical-session-pre.target" ];
|
|
||||||
PartOf = [ "graphical-session.target" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
Service = {
|
|
||||||
Type = "simple";
|
|
||||||
Restart = "always";
|
|
||||||
ExecStart = pkgs.writeShellScript "eww-daemon" ''
|
|
||||||
${pkgs.eww}/bin/eww daemon --no-daemonize
|
|
||||||
'';
|
|
||||||
|
|
||||||
# Takes a value between -20 and 19. Higher values (e.g. 19) mean lower priority.
|
|
||||||
# Lower priority means the process will get less CPU time and therefore will be slower.
|
|
||||||
# Fortunately, I do not need my status bar to be fast. Also, te difference is almost
|
|
||||||
# unnoticeable and definitely negligible.
|
|
||||||
Nice = 19;
|
|
||||||
};
|
|
||||||
|
|
||||||
Install.WantedBy = [ "graphical-session.target" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
"eww-window@" = {
|
|
||||||
Unit = {
|
|
||||||
Description = "Open %I eww (ElKowar's Wacky Widgets) window";
|
|
||||||
After = [ "eww.service" ];
|
|
||||||
PartOf = [ "graphical-session-pre.target" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
Service = {
|
|
||||||
Type = "oneshot";
|
|
||||||
RemainAfterExit = true;
|
|
||||||
ExecStartPre = "${pkgs.eww}/bin/eww ping";
|
|
||||||
ExecStart = "${pkgs.eww}/bin/eww open %i";
|
|
||||||
ExecStop = "${pkgs.eww}/bin/eww close %i";
|
|
||||||
Restart = "on-failure";
|
|
||||||
};
|
|
||||||
|
|
||||||
Install.WantedBy = [ "graphical-session.target" ];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,72 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
osConfig,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
inherit (lib) mkIf optionals concatStringsSep;
|
|
||||||
|
|
||||||
cfg = osConfig.myOptions.home-manager.programs.browsers.chromium;
|
|
||||||
isWayland = osConfig.myOptions.home-manager.wms.isWayland;
|
|
||||||
in {
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
programs.chromium = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
package = pkgs.ungoogled-chromium.override {
|
|
||||||
nss = pkgs.nss_latest;
|
|
||||||
commandLineArgs = [
|
|
||||||
# Ungoogled features
|
|
||||||
"--disable-search-engine-collection"
|
|
||||||
"--extension-mime-request-handling=always-prompt-for-install"
|
|
||||||
"--fingerprinting-canvas-image-data-noise"
|
|
||||||
"--fingerprinting-canvas-measuretext-noise"
|
|
||||||
"--fingerprinting-client-rects-noise"
|
|
||||||
"--popups-to-tabs"
|
|
||||||
"--show-avatar-button=incognito-and-guest"
|
|
||||||
|
|
||||||
# Experimental features
|
|
||||||
"--enable-features=${
|
|
||||||
concatStringsSep "," [
|
|
||||||
"BackForwardCache:enable_same_site/true"
|
|
||||||
"CopyLinkToText"
|
|
||||||
"OverlayScrollbar"
|
|
||||||
"TabHoverCardImages"
|
|
||||||
"VaapiVideoDecoder"
|
|
||||||
]
|
|
||||||
}"
|
|
||||||
|
|
||||||
# Aesthetics
|
|
||||||
"--force-dark-mode"
|
|
||||||
|
|
||||||
# Performance
|
|
||||||
"--enable-gpu-rasterization"
|
|
||||||
"--enable-oop-rasterization"
|
|
||||||
"--enable-zero-copy"
|
|
||||||
"--ignore-gpu-blocklist"
|
|
||||||
|
|
||||||
# Etc
|
|
||||||
# "--gtk-version=4"
|
|
||||||
"--disk-cache=$XDG_RUNTIME_DIR/chromium-cache"
|
|
||||||
"--no-default-browser-check"
|
|
||||||
"--no-service-autorun"
|
|
||||||
"--disable-features=PreloadMediaEngagementData,MediaEngagementBypassAutoplayPolicies"
|
|
||||||
"--disable-reading-from-canvas"
|
|
||||||
"--no-pings"
|
|
||||||
"--no-first-run"
|
|
||||||
"--no-experiments"
|
|
||||||
"--no-crash-upload"
|
|
||||||
"--disable-wake-on-wifi"
|
|
||||||
"--disable-breakpad"
|
|
||||||
"--disable-sync"
|
|
||||||
"--disable-speech-api"
|
|
||||||
"--disable-speech-synthesis-api"
|
|
||||||
] ++ optionals isWayland [
|
|
||||||
"--ozone-platform=wayland"
|
|
||||||
"--enable-features=UseOzonePlatform"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
_: {
|
|
||||||
imports = [
|
|
||||||
./chromium
|
|
||||||
./mullvad
|
|
||||||
./schizofox
|
|
||||||
./firefox
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
osConfig,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
inherit (lib) mkIf;
|
|
||||||
|
|
||||||
cfg = osConfig.myOptions.home-manager.programs.browsers.firefox;
|
|
||||||
in {
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
programs.firefox = {
|
|
||||||
enable = true;
|
|
||||||
# TODO: Finish this
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,16 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
osConfig,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
inherit (lib) mkIf;
|
|
||||||
|
|
||||||
cfg = osConfig.myOptions.home-manager.programs.browsers.mullvad-browser;
|
|
||||||
in {
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
mullvad-browser
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,151 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
osConfig,
|
|
||||||
inputs,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
inherit (lib) mkIf;
|
|
||||||
|
|
||||||
cfg = osConfig.myOptions.home-manager.programs.browsers.schizofox;
|
|
||||||
in {
|
|
||||||
imports = [inputs.schizofox.homeManagerModule];
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
programs.schizofox = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
theme = {
|
|
||||||
font = "Inter";
|
|
||||||
colors = {
|
|
||||||
background-darker = "181825";
|
|
||||||
background = "1e1e2e";
|
|
||||||
foreground = "cdd6f4";
|
|
||||||
};
|
|
||||||
|
|
||||||
extraUserChrome = ''
|
|
||||||
@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); /* only needed once */
|
|
||||||
|
|
||||||
/* full screen toolbars */
|
|
||||||
#navigator-toolbox[inFullscreen] toolbar:not([collapsed="true"]) {
|
|
||||||
visibility:visible!important;
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
search = {
|
|
||||||
defaultSearchEngine = "Brave";
|
|
||||||
removeEngines = [ "Bing" "Amazon.com" "eBay" "Twitter" "Wikipedia" "LibRedirect" ];
|
|
||||||
searxUrl = "https://searx.be";
|
|
||||||
searxQuery = "https://searx.be/search?q={searchTerms}&categories=general";
|
|
||||||
|
|
||||||
addEngines = [
|
|
||||||
{
|
|
||||||
Name = "Brave";
|
|
||||||
Description = "Brave search";
|
|
||||||
Alias = "!brave";
|
|
||||||
Method = "GET";
|
|
||||||
URLTemplate = "https://search.brave.com/search?q={searchTerms}";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
Name = "NixOS Packages";
|
|
||||||
Description = "NixOS Unstable package search";
|
|
||||||
Alias = "!np";
|
|
||||||
Method = "GET";
|
|
||||||
URLTemplate = "https://search.nixos.org/packages?channel=unstable&query={searchTerms}";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
Name = "NixOS Options";
|
|
||||||
Description = "NixOS Unstable option search";
|
|
||||||
Alias = "!no";
|
|
||||||
Method = "GET";
|
|
||||||
URLTemplate = "https://search.nixos.org/options?channel=unstable&query={searchTerms}";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
Name = "NixOS Wiki";
|
|
||||||
Description = "NixOS Wiki search";
|
|
||||||
Alias = "!nw";
|
|
||||||
Method = "GET";
|
|
||||||
URLTemplate = "https://nixos.wiki/index.php?search={searchTerms}";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
Name = "Home Manager Options";
|
|
||||||
Description = "Home Manager option search";
|
|
||||||
Alias = "!hm";
|
|
||||||
Method = "GET";
|
|
||||||
URLTemplate = "https://mipmip.github.io/home-manager-option-search?query={searchTerms}";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
Name = "MyNixOS";
|
|
||||||
Description = "All-In-One NixOS Search (options (including home-manager), packages, categories, flakes) ";
|
|
||||||
Alias = "!nn";
|
|
||||||
Method = "GET";
|
|
||||||
URLTemplate = "https://mynixos.com/search?q={searchTerms}";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
Name = "Arch Wiki";
|
|
||||||
Description = "Arch Wiki search";
|
|
||||||
Alias = "!aw";
|
|
||||||
Method = "GET";
|
|
||||||
URLTemplate = "https://wiki.archlinux.org/index.php?search={searchTerms}";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
Name = "Gentoo Wiki";
|
|
||||||
Description = "Gentoo Wiki search";
|
|
||||||
Alias = "!gw";
|
|
||||||
Method = "GET";
|
|
||||||
URLTemplate = "https://wiki.gentoo.org/index.php?search={searchTerms}";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
Name = "Debian Wiki";
|
|
||||||
Description = "Debian Wiki search";
|
|
||||||
Alias = "!dw";
|
|
||||||
Method = "GET";
|
|
||||||
URLTemplate = "https://wiki.debian.org/FrontPage?action=fullsearch&value={searchTerms}";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
security = {
|
|
||||||
sanitizeOnShutdown = false; # TODO: check
|
|
||||||
sandbox = true;
|
|
||||||
noSessionRestore = false; # TODO: check
|
|
||||||
userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0";
|
|
||||||
};
|
|
||||||
|
|
||||||
misc = {
|
|
||||||
drm.enable = true;
|
|
||||||
disableWebgl = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
extensions = {
|
|
||||||
simplefox.enable = false; # simplified UI, keyboard controled
|
|
||||||
darkreader.enable = true;
|
|
||||||
extraExtensions = let
|
|
||||||
mkUrl = name: "https://addons.mozilla.org/firefox/downloads/latest/${name}/latest.xpi";
|
|
||||||
|
|
||||||
extensions = [
|
|
||||||
{
|
|
||||||
id = "{c2c003ee-bd69-42a2-b0e9-6f34222cb046}";
|
|
||||||
name = "auto-tab-discard";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
id = "sponsorBlocker@ajay.app";
|
|
||||||
name = "sponsorblock";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
id = "{446900e4-71c2-419f-a6a7-df9c091e268b}";
|
|
||||||
name = "bitwarden-password-manager";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
id = "{9f043cd9-bcc0-4ea0-9407-9e6274c2182d}";
|
|
||||||
name = "videospeed";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
extraExtensions = builtins.foldl' (acc: ext: acc // {ext.id = { install_url = mkUrl ext.name;};}) {} extensions;
|
|
||||||
in extraExtensions;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
|
@ -3,7 +3,5 @@ _: {
|
||||||
./wms
|
./wms
|
||||||
./launchers
|
./launchers
|
||||||
./apps
|
./apps
|
||||||
./bars
|
|
||||||
./browsers
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -122,8 +122,8 @@ alias sv='systemctl'
|
||||||
alias pacnew="find / -name '*.pacnew' 2>/dev/null" # Search for all new configurations after pacman update
|
alias pacnew="find / -name '*.pacnew' 2>/dev/null" # Search for all new configurations after pacman update
|
||||||
alias backup="rsync -avHAXS --delete --filter='dir-merge /.rsync-filter'" # Make full rsync backup, respecting .rsync-filter files for exclusions
|
alias backup="rsync -avHAXS --delete --filter='dir-merge /.rsync-filter'" # Make full rsync backup, respecting .rsync-filter files for exclusions
|
||||||
#alias upload='curl -F "f:1=<-" ix.io' # ix.io was offline for about 10 months now...
|
#alias upload='curl -F "f:1=<-" ix.io' # ix.io was offline for about 10 months now...
|
||||||
#alias upload='curl -F "sprunge=<-" http://sprunge.us' # sprunge.us was offline for a few weeks now, not sure why
|
#alias upload='curl -F "file=@-" https://hardfiles.org' # hardfiles.org works, but has 24-hour expiry
|
||||||
alias upload='curl -F "file=@-" https://hardfiles.org' # hardfiles.org works, but has 24-hour expiry
|
alias upload='curl -F "sprunge=<-" http://sprunge.us'
|
||||||
alias upload-journal='sudo journalctl -b -1 | upload' # Upload journalctl from last boot to ix.io
|
alias upload-journal='sudo journalctl -b -1 | upload' # Upload journalctl from last boot to ix.io
|
||||||
alias auth-log='journalctl SYSLOG_FACILITY=10 -r'
|
alias auth-log='journalctl SYSLOG_FACILITY=10 -r'
|
||||||
alias cpu-stress='for i in $(seq $(getconf _NPROCESSORS_ONLN)); do yes > /dev/null & done' # Run `yes > /dev/null` on all cores as stress test
|
alias cpu-stress='for i in $(seq $(getconf _NPROCESSORS_ONLN)); do yes > /dev/null & done' # Run `yes > /dev/null` on all cores as stress test
|
||||||
|
|
|
@ -95,13 +95,6 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
programs = {
|
programs = {
|
||||||
browsers = {
|
|
||||||
chromium.enable = true;
|
|
||||||
firefox.enable = true;
|
|
||||||
mullvad-browser.enable = true;
|
|
||||||
schizofox.enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
spotify.enable = true;
|
spotify.enable = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -59,16 +59,13 @@
|
||||||
"Media"
|
"Media"
|
||||||
"dots"
|
"dots"
|
||||||
|
|
||||||
".mozilla"
|
|
||||||
".mullvad"
|
|
||||||
".config/chromium"
|
|
||||||
".local/share/gnupg"
|
".local/share/gnupg"
|
||||||
".local/share/wakatime"
|
".local/share/wakatime"
|
||||||
".local/share/nvim"
|
".local/share/nvim"
|
||||||
".local/state/nvim"
|
".local/state/nvim"
|
||||||
".local/share/zsh"
|
".local/share/zsh"
|
||||||
".local/share/cargo"
|
".local/cargo"
|
||||||
".local/share/go"
|
".local/go"
|
||||||
];
|
];
|
||||||
extraFiles = [
|
extraFiles = [
|
||||||
".config/git/git-credentials"
|
".config/git/git-credentials"
|
||||||
|
@ -128,12 +125,6 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
programs = {
|
programs = {
|
||||||
bars.eww.enable = true;
|
|
||||||
browsers = {
|
|
||||||
firefox.enable = true;
|
|
||||||
chromium.enable = true;
|
|
||||||
mullvad-browser.enable = true;
|
|
||||||
};
|
|
||||||
spotify.enable = true;
|
spotify.enable = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -12,20 +12,6 @@ in
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
bars = {
|
|
||||||
eww = {
|
|
||||||
enable = mkEnableOption "Eww bar";
|
|
||||||
autostart.enable = mkEnableOption "auto-starting eww daemon on graphical-session.target";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
browsers = {
|
|
||||||
chromium.enable = mkEnableOption "Chromium browser";
|
|
||||||
firefox.enable = mkEnableOption "Firefox browser";
|
|
||||||
mullvad-browser.enable = mkEnableOption "Mullvad browser";
|
|
||||||
schizofox.enable = mkEnableOption "Schizophrenic version of Firefox browser";
|
|
||||||
};
|
|
||||||
|
|
||||||
spotify.enable = mkEnableOption "Spotify";
|
spotify.enable = mkEnableOption "Spotify";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue