big cleanup

This commit is contained in:
atagen 2024-05-02 14:01:13 +10:00
parent 533f88f4cd
commit c7c6606d14
81 changed files with 0 additions and 8334 deletions

5
TODO
View file

@ -2,9 +2,4 @@ implement agenix
figure out a way to get firefox policies and plugins set up in webapps
fix theme gen for gtk+kde+kvantum - apply defaults/replacements from
https://github.com/nana-4/materia-theme/blob/master/change_color.sh
to
https://github.com/PapirusDevelopmentTeam/materia-kde/tree/master
is theme gen relevant with cosmic?

View file

@ -1,95 +0,0 @@
{
"nodes": {
"comfyui-mgr": {
"flake": false,
"locked": {
"lastModified": 1714523018,
"narHash": "sha256-BsJbbWtgIx7ydyVCy4lxdJR9xAGvCdA3FDGdwcLEuSY=",
"owner": "ltdrdata",
"repo": "ComfyUI-Manager",
"rev": "393bf64b35439ee948dc71483e69c478bb05e35c",
"type": "github"
},
"original": {
"owner": "ltdrdata",
"repo": "ComfyUI-Manager",
"type": "github"
}
},
"comfyui-src": {
"flake": false,
"locked": {
"lastModified": 1714526620,
"narHash": "sha256-mQ9YBiSAR+WbGeEHd7DRdcMSz9+XF6ZrQkxrZigv2Cw=",
"owner": "comfyanonymous",
"repo": "ComfyUI",
"rev": "2aed53c4ac78d842a2e984d23343334a29ed8562",
"type": "github"
},
"original": {
"owner": "comfyanonymous",
"repo": "ComfyUI",
"type": "github"
}
},
"flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1710146030,
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1714253743,
"narHash": "sha256-mdTQw2XlariysyScCv2tTE45QSU9v/ezLcHJ22f0Nxc=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "58a1abdbae3217ca6b702f03d3b35125d88a2994",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"comfyui-mgr": "comfyui-mgr",
"comfyui-src": "comfyui-src",
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
}
},
"root": "root",
"version": 7
}

View file

@ -1,68 +0,0 @@
{
description = "ComfyUI";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
comfyui-src = {
url = "github:comfyanonymous/ComfyUI";
flake = false;
};
comfyui-mgr = {
url = "github:ltdrdata/ComfyUI-Manager";
flake = false;
};
};
# cuda
# micromamba
# pytorch
# triton
# comfyui
# requirements.txt
# needs some kind of mutability escape hatch for addons, models etc..
outputs = {
self,
nixpkgs,
flake-utils,
comfyui-src,
comfyui-mgr,
}:
flake-utils.lib.eachDefaultSystem (
system: let
pkgs = import nixpkgs {inherit system;};
in
with pkgs; rec {
packages.default = buildFHSEnv {
name = "ComfyUI";
targetPkgs = pkgs: (with pkgs;
with cudaPackages; [
cuda_cudart
cudnn
micromamba
]);
extraBuildCommands = ''
mkdir -p $out/opt/ComfyUI
mkdir -p $out/opt/ComfyUI/custom_nodes/ComfyUI-Manager
cp -R ${comfyui-src}/* $out/opt/ComfyUI
cp -R ${comfyui-mgr}/* $out/opt/ComfyUI/custom_nodes/ComfyUI-Manager
'';
profile = ''
ln -nfs /opt/ComfyUI/models /host/etc/comfyui/models
ln -nfs /opt/ComfyUI/custom_nodes /host/etc/comfyui/custom_nodes
'';
# cd /opt/ComfyUI
# eval "$(micromamba shell hook --shell bash)"
# micromamba activate
# micromamba install python pytorch triton
# pip install -r requirements.txt
# '';
runScript = ''
bash
# ./startup.sh
'';
};
}
);
}

View file

@ -1,54 +0,0 @@
{
description = "Description for the project";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
flake-parts.url = "github:hercules-ci/flake-parts";
lutgen-lock = {
url = "https://raw.githubusercontent.com/ozwaldorf/lutgen-rs/main/Cargo.lock";
flake = false;
};
lutgen-src = {
url = "github:ozwaldorf/lutgen-rs";
flake = false;
};
};
outputs = inputs @ {flake-parts, ...}:
flake-parts.lib.mkFlake {inherit inputs;} {
imports = [
# To import a flake module
# 1. Add foo to inputs
# 2. Add foo as a parameter to the outputs function
# 3. Add here: foo.flakeModule
];
systems = ["x86_64-linux" "aarch64-linux" "aarch64-darwin" "x86_64-darwin"];
perSystem = {
config,
self',
inputs',
pkgs,
system,
...
}: {
# Per-system attributes can be defined here. The self' and inputs'
# module parameters provide easy access to attributes of the same
# system.
# Equivalent to inputs'.nixpkgs.legacyPackages.hello;
packages.default = pkgs.rustPlatform.buildRustPackage rec {
pname = "lutgen";
version = "git-${inputs.lutgen-src.lastModifiedDate}";
src = inputs.lutgen-src;
cargoLock = {
lockFile = inputs.lutgen-lock;
};
};
};
flake = {
# The usual flake attributes can be defined here, including system-
# agnostic ones like nixosModule and system-enumerating ones, although
# those are more easily expressed in perSystem.
};
};
}

View file

@ -1,118 +0,0 @@
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
flake-parts.url = "github:hercules-ci/flake-parts";
qtile-src = {
url = "github:qtile/qtile";
flake = false;
};
pywlroots = {
url = "path:pywlroots";
inputs.nixpkgs.follows = "nixpkgs";
};
# smartfloat = {
# url = "path:smartfloat";
# inputs.nixpkgs.follows = "nixpkgs";
# };
# scenefx = {
# url = "path:scenefx";
# inputs.nixpkgs.follows = "nixpkgs";
# };
};
outputs = inputs @ {
flake-parts,
qtile-src,
pywlroots,
...
}:
flake-parts.lib.mkFlake {inherit inputs;} {
systems = ["x86_64-linux"];
perSystem = {
config,
self',
inputs',
pkgs,
system,
...
}: rec {
packages.qtile-unwrapped = with pkgs;
with python3Packages;
buildPythonPackage rec {
pname = "qtile";
version = "unstable-${inputs.qtile-src.lastModifiedDate}";
src = inputs.qtile-src;
SETUPTOOLS_SCM_PRETEND_VERSION = "0.23.0";
postPatch = ''
substituteInPlace libqtile/pangocffi.py \
--replace libgobject-2.0.so.0 ${pkgs.glib.out}/lib/libgobject-2.0.so.0 \
--replace libpangocairo-1.0.so.0 ${pkgs.pango.out}/lib/libpangocairo-1.0.so.0 \
--replace libpango-1.0.so.0 ${pkgs.pango.out}/lib/libpango-1.0.so.0
substituteInPlace libqtile/backend/x11/xcursors.py \
--replace libxcb-cursor.so.0 ${pkgs.xcb-util-cursor.out}/lib/libxcb-cursor.so.0
substituteInPlace libqtile/backend/wayland/cffi/cairo_buffer.py \
--replace drm_fourcc.h libdrm/drm_fourcc.h
substituteInPlace libqtile/backend/wayland/cffi/build.py \
--replace /usr/include/pixman-1 ${lib.getDev pkgs.pixman}/include \
--replace /usr/include/libdrm ${lib.getDev pkgs.libdrm}/include/libdrm
'';
nativeBuildInputs = [
pkg-config
setuptools-scm
setuptools
];
propagatedBuildInputs = [
xcffib
(cairocffi.override {withXcffib = true;})
python-dateutil
dbus-python
dbus-next
mpd2
psutil
pulsectl-asyncio
pyxdg
pygobject3
pywayland
inputs'.pywlroots.packages.default
xkbcommon
];
buildInputs = [
libinput
libxkbcommon
libdrm
wayland
xorg.xcbutilwm
# inputs'.scenefx.packages.default
((wlroots_0_16.override {
xwayland = xwayland;
enableXWayland = true;
})
.overrideAttrs (wf: wp: {
postPatch =
wp.postPatch
+ ''
substituteInPlace render/gles2/renderer.c --replace "glFlush();" "glFinish();"
'';
}))
];
# patches = [./scenefx.patch];
makeWrapperArgs = [
"--suffix PATH : ${lib.makeBinPath [mypy]}"
];
doCheck = false;
};
packages.qtile = with pkgs;
with python3Packages;
(python3.withPackages (_: [packages.qtile-unwrapped])).overrideAttrs (_: {
inherit (packages.qtile-unwrapped) pname version meta;
name = with packages.qtile-unwrapped; "${pname}-${version}";
passthru.unwrapped = packages.qtile-unwrapped;
});
};
};
}

View file

@ -1,74 +0,0 @@
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
flake-parts.url = "github:hercules-ci/flake-parts";
pywlroots-src = {
url = "github:flacjacket/pywlroots";
flake = false;
};
};
outputs = inputs @ {
flake-parts,
pywlroots-src,
...
}:
flake-parts.lib.mkFlake {inherit inputs;} {
systems = ["x86_64-linux"];
perSystem = {
config,
self',
inputs',
pkgs,
system,
...
}: {
packages.default = with pkgs;
with pkgs.python3Packages;
buildPythonPackage rec {
pname = "pywlroots";
version = "unstable-${inputs.pywlroots-src.lastModifiedDate}";
format = "setuptools";
disable = pythonOlder "3.7";
src = inputs.pywlroots-src;
nativeBuildInputs = [pkg-config];
propagatedNativeBuildInputs = [cffi];
buildInputs = [
libinput
libxkbcommon
pixman
xorg.libxcb
xorg.xcbutilwm
udev
wayland
((wlroots_0_16.override {
xwayland = xwayland;
enableXWayland = true;
})
.overrideAttrs (wf: wp: {
postPatch =
wp.postPatch
+ ''
substituteInPlace render/gles2/renderer.c --replace "glFlush();" "glFinish();"
'';
}))
];
propagatedBuildInputs = [
cffi
pywayland
xkbcommon
];
nativeCheckInputs = [pytestCheckHook];
postBuild = ''
${python3.pythonOnBuildForHost.interpreter} wlroots/ffi_build.py
'';
pythonImportsCheck = ["wlroots"];
passthru.test = {inherit qtile;};
};
};
}; #/mkFlake
}

View file

@ -1,34 +0,0 @@
diff --git a/wlroots/ffi_build.py b/wlroots/ffi_build.py
index ec01f8b..cac6dd8 100755
--- a/wlroots/ffi_build.py
+++ b/wlroots/ffi_build.py
@@ -1891,6 +1891,12 @@ void wlr_scene_buffer_set_dest_size(struct wlr_scene_buffer *scene_buffer,
void wlr_scene_buffer_set_transform(struct wlr_scene_buffer *scene_buffer,
enum wl_output_transform transform);
+void wlr_scene_buffer_set_opacity(struct wlr_scene_buffer *scene_buffer,
+ float opacity);
+
+void wlr_scene_buffer_set_corner_radius(struct wlr_scene_buffer *scene_buffer,
+ int radii);
+
void wlr_scene_buffer_send_frame_done(struct wlr_scene_buffer *scene_buffer,
struct timespec *now);
diff --git a/wlroots/wlr_types/scene.py b/wlroots/wlr_types/scene.py
index 3a99d2f..2f3d5ba 100755
--- a/wlroots/wlr_types/scene.py
+++ b/wlroots/wlr_types/scene.py
@@ -170,6 +170,12 @@ class SceneBuffer(Ptr):
region_ptr = region._ptr if region else ffi.NULL
lib.wlr_scene_buffer_set_buffer_with_damage(self._ptr, buffer_ptr, region_ptr)
+ def set_opacity(self, opacity: float) -> None:
+ lib.wlr_scene_buffer_set_opacity(self._ptr, opacity)
+
+ def set_corner_radius(self, radii: int) -> None:
+ lib.wlr_scene_buffer_set_corner_radius(self._ptr, radii)
+
T = TypeVar("T")
BufferCallback = Callable[[SceneBuffer, int, int, T], None]

View file

@ -1,35 +0,0 @@
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
flake-parts.url = "github:hercules-ci/flake-parts";
};
outputs = inputs @ {flake-parts, ...}:
flake-parts.lib.mkFlake {inherit inputs;} {
systems = ["x86_64-linux"];
perSystem = {
config,
self',
inputs',
pkgs,
system,
...
}: {
packages.default = with pkgs;
stdenv.mkDerivation rec {
pname = "smartfloat";
version = "0.1.0";
src = builtins.path {
name = "smartfloat";
path = ./smartfloat.py;
sha256 = "62fe831a0e4d2e02fee85928f844992418d1a94a8eacd5336f1e51d4490adb31";
};
unpackPhase = ''
cp $src $out
'';
};
};
};
}

View file

@ -1,108 +0,0 @@
from __future__ import annotations
from typing import TYPE_CHECKING
from libqtile.backend.base import Window
from libqtile.config import ScreenRect
from libqtile.layout.base import Layout
from typing import List
class SmartWindow:
def __init__(self, payload, x: int, y: int, w: int, h: int) -> None:
self.payload = payload
self.x: int = x
self.y: int = y
self.w: int = w
self.h: int = h
def intersect(self, window) -> bool:
return \
abs((self.x + self.w/2) - (window.x + window.w/2)) * 2 \
< (self.w + window.w) and \
abs((self.y + self.h/2) - (window.y + window.h/2)) * 2 \
< (self.h + window.h)
def __repr__(self):
return "<SmartWindow containing" + \
f"{self.payload} at {self.x}, {self.y}, {self.w}, {self.h}>"
class SmartFloat(Layout):
defaults = [
('name', 'SmartFloat', 'Layout name'),
]
def __init__(self, **config) -> None:
Layout.__init__(self, **config)
self.add_defaults(SmartFloat.defaults)
self.windows: List[SmartWindow] = []
self.dims: ScreenRect | None = None
self.focused: Window | None = None
def find_window(self, client: Window) -> SmartWindow | None:
for window in self.windows:
if window.payload == client:
return window
return None
def add_client(self, client: Window) -> None:
self.windows.append(SmartWindow(client, 0, 0, 600, 600))
def remove(self, client: Window) -> None:
window = self.find_window(client)
if window:
self.windows.remove(window)
def configure(self, client: Window, screen_rect: ScreenRect) -> None:
self.dims = screen_rect
window = self.find_window(client)
if not window:
return
if len(self.windows) == 1:
window.x = screen_rect.x + screen_rect.width // 3
window.y = screen_rect.y + screen_rect.height // 3
window.w = screen_rect.width // 2
window.h = screen_rect.height // 2
# else:
# for other_window in self.windows:
# if not other_window == window and window.intersect(other_window):
# diff_x = window.x - other_window.x
# diff_y = window.y - other_window.y
client.place(
window.x,
window.y,
window.w,
window.h,
self.border_width,
getattr(self, "border_" + "focus" if client.has_focus else "normal"),
above=True
)
client.unhide()
@abstract_method
def focus_first(self):
return None
@abstract_method
def focus_last(self):
return None
@abstract_method
def focus_next(self):
return None
@abstract_method
def focus_previous(self):
return None
@abstract_method
def next(self):
return None
@abstract_method
def previous(self):
return None

View file

@ -1,147 +0,0 @@
{
"nodes": {
"flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1701680307,
"narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "4022d587cbbfd70fe950c1e2083a02621806a725",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_2": {
"inputs": {
"systems": "systems_2"
},
"locked": {
"lastModified": 1681202837,
"narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "cfacdce06f30d2b68473a46042957675eebb3401",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1704722960,
"narHash": "sha256-mKGJ3sPsT6//s+Knglai5YflJUF2DGj7Ai6Ynopz0kI=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "317484b1ead87b9c1b8ac5261a8d2dd748a0492d",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1681358109,
"narHash": "sha256-eKyxW4OohHQx9Urxi7TQlFBTDWII+F+x2hklDOQPB50=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "96ba1c52e54e74c3197f4d43026b3f3d92e83ff9",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs",
"rust-overlay": "rust-overlay",
"swayosd-src": "swayosd-src"
}
},
"rust-overlay": {
"inputs": {
"flake-utils": "flake-utils_2",
"nixpkgs": "nixpkgs_2"
},
"locked": {
"lastModified": 1705025860,
"narHash": "sha256-9vcqo5CJLOHU63S7pVlP0u4OhgJxrXebQR4vqMPXLRg=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "d458975da373a37422577886566fce8201bc1254",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"type": "github"
}
},
"swayosd-src": {
"flake": false,
"locked": {
"lastModified": 1702248404,
"narHash": "sha256-3NJHZv4Ed7haUUmE9JV9Yl4rRnJlPqQFv53Xuw0q+IY=",
"owner": "ErikReider",
"repo": "SwayOSD",
"rev": "a0709bcd89d6ca19889486972bac35e69f1fa8e4",
"type": "github"
},
"original": {
"owner": "ErikReider",
"repo": "SwayOSD",
"type": "github"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_2": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
}
},
"root": "root",
"version": 7
}

View file

@ -1,71 +0,0 @@
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
swayosd-src = {
url = "github:ErikReider/SwayOSD";
flake = false;
};
rust-overlay.url = "github:oxalica/rust-overlay";
};
outputs = inputs @ {
self,
nixpkgs,
rust-overlay,
flake-utils,
...
}:
flake-utils.lib.eachDefaultSystem (
system: let
overlays = [(import rust-overlay)];
pkgs = import nixpkgs {
inherit system overlays;
};
in
with pkgs; {
packages.default = stdenv.mkDerivation {
pname = "swayosd";
version = "unstable-${inputs.swayosd-src.lastModifiedDate}";
src = inputs.swayosd-src;
cargoDeps = rustPlatform.importCargoLock {
lockFile = "${inputs.swayosd-src}/Cargo.lock";
};
nativeBuildInputs = [
wrapGAppsHook
pkg-config
meson
ninja
glib
sassc
rustPlatform.cargoSetupHook
(rust-bin.selectLatestNightlyWith (toolchain: toolchain.default))
];
buildInputs = [
gtk-layer-shell
libevdev
libinput
libpulseaudio
udev
systemd
];
patches = [
./systemd.patch
];
postPatch = ''
substituteInPlace data/udev/99-swayosd.rules \
--replace /bin/chgrp ${coreutils}/bin/chgrp \
--replace /bin/chmod ${coreutils}/bin/chmod
'';
};
}
);
}

View file

@ -1,18 +0,0 @@
diff --git a/data/meson.build b/data/meson.build
index fc687a5..68decdf 100644
--- a/data/meson.build
+++ b/data/meson.build
@@ -41,11 +42,7 @@ configure_file(
# Systemd service unit
systemd = dependency('systemd', required: false)
-if systemd.found()
- systemd_service_install_dir = systemd.get_variable(pkgconfig :'systemdsystemunitdir')
-else
- systemd_service_install_dir = join_paths(libdir, 'systemd', 'system')
-endif
+systemd_service_install_dir = join_paths(libdir, 'systemd', 'system')
configure_file(
configuration: conf_data,

View file

@ -1,33 +0,0 @@
$black: #BLACK;
$black_a: #BLCKA;
$red: #RED;
$red_a: #RDA;
$green: #GREEN;
$green_a: #GRNA;
$yellow: #YELLOW;
$yellow_a: #YLWA;
$blue: #BLUE;
$blue_a: #BLUA;
$magenta: #MAGENTA;
$magenta_a: #MGNA;
$cyan: #CYAN;
$cyan_a: #CYNA;
$white: #WHITE;
$white_a: #WHTA;
$fg: #FG;
$bg: #BG;
$border: $yellow_a;
$shadow: $black_a;
$base: $bg;
$bg1: $black;
$text: $fg;
$outline: $yellow_a;

View file

@ -1,136 +0,0 @@
exec-once = eww open bar
exec-once = swayidle timeout 300 'gtklock'
exec-once = swayidle timeout 900 'systemctl suspend'
exec-once = ckb-next -c -b
exec-once = swaybg -i #BGIMAGE -m fill
exec-once = xrdb -l ~/.Xresources
exec-once = swayosd --max-volume 100
exec-once = keepassxc
exec-once = swaync
exec = eww reload
exec = gsettings set org.gnome.desktop.interface gtk-theme '#GTKTHEME'
exec = gsettings set org.gnome.desktop.interface font-name '#FONT'
exec = gsettings set org.gnome.desktop.interface icon-theme '#ICONTHEME'
input {
kb_layout=us
kb_options=caps:escape,escape:caps
sensitivity=0.0
accel_profile=flat
force_no_accel=true
numlock_by_default=true
}
general {
layout=dwindle
border_size=#THICK
gaps_in=#GAPSIN
gaps_out=#GAPSOUT
resize_on_border=true
hover_icon_on_border=true
col.active_border=0xff#ACTIVEBORDER
col.inactive_border=0xff#BORDER
}
dwindle {
preserve_split=true
pseudotile=true
use_active_for_splits=true
no_gaps_when_only=false
}
decoration {
rounding=#ROUND
blur=0
# screen_shader=/home/bolt/Code/desktop.frag
}
misc {
vfr=true
vrr=0
mouse_move_enables_dpms=true
key_press_enables_dpms=true
}
animations {
enabled=1
bezier=overshot,0.05,0.9,0.1,1.1
bezier=smooth,0.06,0.94,0.1,1.0
bezier=slosmooth,0.1,0.89,0.14,0.96
animation=windows,1,6,overshot,popin
animation=workspaces,1,6,smooth,slidevert
animation=specialWorkspace,1,6,overshot,slide
}
misc {
disable_hyprland_logo=true
disable_splash_rendering=true
}
monitor=,highrr,auto,1
windowrule=noanim,^(wlogout)$
windowrule=workspace special silent,^(keepassxc)$
windowrulev2 = workspace special silent, title:(KeePassXC)$
windowrule=dimaround,^(fuzzel)$
bindm=SUPER,mouse:272,movewindow
bindm=SUPER,mouse:273,resizewindow
bind=SUPER,Return,exec,kitty
bind=SUPER,E,exec,thunar
bind=SUPER,F,exec,firefox
bind=SUPER_SHIFT,F,exec,nyxt
bind=SUPER,D,exec,fuzzel
bind=SUPER,N,exec,swaync-client -t
bind=SUPER_SHIFT,Q,killactive
bind=SUPER_SHIFT,space,fullscreen,0
bind=SUPER,space,togglefloating
bind=SUPER,space,centerwindow
bind=SUPER,c,centerwindow
bind=SUPER,h,movefocus,l
bind=SUPER,l,movefocus,r
bind=SUPER,j,movefocus,d
bind=SUPER,k,movefocus,u
bind=SUPER_SHIFT,h,movewindow,l
bind=SUPER_SHIFT,l,movewindow,r
bind=SUPER_SHIFT,j,movewindow,d
bind=SUPER_SHIFT,k,movewindow,u
bind=SUPER,s,togglesplit
bind=SUPER,a,changegroupactive,f
bind=SUPER,z,changegroupactive,b
bind=SUPER,x,togglegroup
bind=SUPER,1,workspace,1
bind=SUPER,2,workspace,2
bind=SUPER,3,workspace,3
bind=SUPER,4,workspace,4
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_CTRL,h,resizeactive,-40 0
bind=SUPER_CTRL,l,resizeactive,40 0
bind=SUPER_CTRL,j,resizeactive,0 -40
bind=SUPER_CTRL,k,resizeactive,0 40
bind=SUPER,minus,togglespecialworkspace
bind=SUPER_SHIFT,minus,movetoworkspace,special
bind=SUPER_SHIFT,S,exec,grim -g "$(slurp)" -t png -o "$HOME/Pictures/$(date +%F_%H-%m-%S).png" && notify-send "Screenshot taken."
bind=SUPER_SHIFT_CTRL,S,exec,kooha
bind=SUPER_SHIFT,E,exec,wlogout
bind=,XF86AudioMute,exec,swayosd --output-volume mute-toggle
bind=,XF86AudioRaiseVolume,exec,swayosd --output-volume raise
bind=,XF86AudioLowerVolume,exec,swayosd --output-volume lower
bind=,XF86AudioStop,exec,playerctl stop
bind=,XF86AudioPlay,exec,playerctl play-pause
bind=,XF86AudioPrev,exec,playerctl previous
bind=,XF86AudioNext,exec,playerctl next
bind=,XF86MonBrightnessUp,exec,swayosd --brightness raise
bind=,XF86MonBrightnessDown,exec,swayosd --brightness lower

View file

@ -1,58 +0,0 @@
let {
$workspaces = {
type = "workspaces"
all_monitors = false
}
$focused = { type = "focused" }
$mpris = {
type = "music"
player_type = "mpris"
on_click_middle = "playerctl play-pause"
on_scroll_up = "playerctl volume +5"
on_scroll_down = "playerctl volume -5"
}
$sys_info = {
type = "sys_info"
interval.memory = 30
interval.cpu = 1
interval.temps = 5
interval.disks = 300
interval.networks = 3
format = [
" {cpu_percent}% | {temp_c:k10temp_Tccd1}°C"
" {memory_used} / {memory_total} GB ({memory_percent}%)"
"| {swap_used} / {swap_total} GB ({swap_percent}%)"
" {disk_used:/} / {disk_total:/} GB ({disk_percent:/}%)"
"李 {net_down:enp39s0} / {net_up:enp3s0} Mbps"
"猪 {load_average:1} | {load_average:5} | {load_average:15}"
" {uptime}"
]
}
$tray = { type = "tray" }
$clock = { type = "clock" }
$button = { type = "button" name="power-btn" label = "" on_click = "!wlogout" }
$left = [ $workspaces ]
$center = [ $focused ]
$right = [ $mpris $sys_info $button $clock ]
}
in {
anchor_to_edges = true
position = "top"
height = 16
icon_theme = "Papirus-Dark"
start = $left
center = $center
end = $right
}

View file

@ -1,201 +0,0 @@
@define-color color_bg #BG;
@define-color color_bg_dark #DARKBG;
@define-color color_border #BORDER;
@define-color color_border_active #ACTIVEBORDER;
@define-color color_text #TEXT;
@define-color color_urgent #URGENT;
/* -- base styles -- */
* {
font-family: #FONT, sans-serif;
font-size: #SZFONTpx;
border: none;
border-radius: 0;
}
box, menubar, button {
background-color: @color_bg;
background-image: none;
}
button, label {
color: @color_text;
}
button:hover {
background-color: @color_bg_dark;
}
#bar {
border-top: 1px solid @color_border;
}
.popup {
border: 1px solid @color_border;
padding: 1em;
}
/* -- clipboard -- */
.clipboard {
margin-left: 5px;
font-size: 1.1em;
}
.popup-clipboard .item {
padding-bottom: 0.3em;
border-bottom: 1px solid @color_border;
}
/* -- clock -- */
.clock {
font-weight: bold;
margin-left: 5px;
}
.popup-clock .calendar-clock {
color: @color_text;
font-size: 2.5em;
padding-bottom: 0.1em;
}
.popup-clock .calendar {
background-color: @color_bg;
color: @color_text;
}
.popup-clock .calendar .header {
padding-top: 1em;
border-top: 1px solid @color_border;
font-size: 1.5em;
}
.popup-clock .calendar:selected {
background-color: @color_border_active;
}
/* -- launcher -- */
.launcher .item {
margin-right: 4px;
}
.launcher .item:not(.focused):hover {
background-color: @color_bg_dark;
}
.launcher .open {
border-bottom: 1px solid @color_text;
}
.launcher .focused {
border-bottom: 2px solid @color_border_active;
}
.launcher .urgent {
border-bottom-color: @color_urgent;
}
.popup-launcher {
padding: 0;
}
.popup-launcher .popup-item:not(:first-child) {
border-top: 1px solid @color_border;
}
/* -- music -- */
.music:hover * {
background-color: @color_bg_dark;
}
.popup-music .album-art {
margin-right: 1em;
}
.popup-music .icon-box {
margin-right: 0.4em;
}
.popup-music .title .icon, .popup-music .title .label {
font-size: 1.7em;
}
.popup-music .controls *:disabled {
color: @color_border;
}
.popup-music .volume .slider slider {
border-radius: 100%;
}
.popup-music .volume .icon {
margin-left: 4px;
}
.popup-music .progress .slider slider {
border-radius: 100%;
}
/* -- script -- */
.script {
padding-left: 10px;
}
/* -- sys_info -- */
.sysinfo {
margin-left: 10px;
}
.sysinfo .item {
margin-left: 5px;
}
/* -- tray -- */
.tray {
margin-left: 10px;
}
/* -- workspaces -- */
.workspaces .item.focused {
box-shadow: inset 0 -3px;
background-color: @color_bg_dark;
}
.workspaces .item:hover {
box-shadow: inset 0 -3px;
}
/* -- custom: power menu -- */
.popup-power-menu #header {
font-size: 1.4em;
padding-bottom: 0.4em;
margin-bottom: 0.6em;
border-bottom: 1px solid @color_border;
}
.popup-power-menu .power-btn {
border: 1px solid @color_border;
padding: 0.6em 1em;
}
.popup-power-menu #buttons > *:nth-child(1) .power-btn {
margin-right: 1em;
}

View file

@ -1 +0,0 @@
/nix/store/yj1wxm9hh8610iyzqnz75kvs6xl8j3my-source

View file

@ -1 +0,0 @@
/nix/store/c11mar1bsnkdiynb2x8nrp2i0661asww-nix-shell-env

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
use flake

View file

@ -1,15 +0,0 @@
#!/usr/bin/env bash
ckb-next -c -b &
mullvad connect &
xrdb -l ~/.Xresources &
wlr-randr --output HDMI-A-1 --transform 90
wlr-randr --output DP-1 --pos 1080,450 --adaptive-sync enabled
# for later..
# gsettings set org.gnome.desktop.interface gtk-theme '${rice.gtk-theme.name}'";}
# gsettings set org.gnome.desktop.interface font-name '${rice.fonts.sans.name}'";}
# gsettings set org.gnome.desktop.interface icon-theme '${rice.icons.name}'";}
dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XDG_SESSION_TYPE NIXOS_OZONE_WL
systemctl --user start qtile-session.target

View file

@ -1,305 +0,0 @@
#!/usr/bin/env python3
from __future__ import annotations
import importlib
import subprocess
import sys
import os
from typing import List
from libqtile.log_utils import logger
from libqtile import bar, hook, layout, qtile, utils, widget
from libqtile.backend import base
from libqtile.lazy import lazy
from libqtile.config import Key, Match, Screen, Click, Drag, Group, ScratchPad, DropDown, Screen
from lib import centre_float, go_to_group, send_to_next_screen
# from smartfloat import SmartFloat
# import qtile_extras.widget as extra_widgets
assert qtile is not None
from typing import Any
from libqtile.core.manager import Qtile
from libqtile.backend.wayland import InputConfig
wl_input_rules = {
"type:keyboard": InputConfig(kb_options="caps:escape"),
"*": InputConfig(accel_profile="flat", pointer_accel=0.0),
}
mod = "mod4"
class Apps:
term = "kitty"
launcher = "fuzzel"
browser = "firefox"
fm = "thunar"
logout = "wlogout"
noti = "swaync-client -t"
ss = "slurp | grim -g - -t png /home/$(whoami)/screenshots/$(date +%F_%H-%m-%S).png"
screenrec = "kooha"
passmgr = "keepassxc"
music = "strawberry"
class OSD:
mute = "volumectl %"
vol_up = "volumectl -u up"
vol_down = "volumectl -u down"
next = "playerctl next"
prev = "playerctl previous"
stop = "playerctl stop"
play = "playerctl play-pause"
brightup = "lightctl up"
brightdown = "lightctl down"
keys = [
Key([mod], "return", lazy.spawn(Apps.term)),
Key([mod], "d", lazy.spawn(Apps.launcher)),
Key([mod], "f", lazy.spawn(Apps.browser)),
Key([mod], "e", lazy.spawn(Apps.fm)),
Key([mod], "n", lazy.spawn(Apps.noti)),
Key([mod, "shift"], "s", lazy.spawn(Apps.ss, shell=True)),
Key([mod, "control", "shift"], "s", lazy.spawn(Apps.screenrec)),
Key([], "XF86AudioMute", lazy.spawn(OSD.mute)),
Key([], "XF86AudioRaiseVolume", lazy.spawn(OSD.vol_up)),
Key([], "XF86AudioLowerVolume", lazy.spawn(OSD.vol_down)),
Key([], "XF86AudioStop", lazy.spawn(OSD.stop)),
Key([], "XF86AudioPlay", lazy.spawn(OSD.play)),
Key([], "XF86AudioPrev", lazy.spawn(OSD.prev)),
Key([], "XF86AudioNext", lazy.spawn(OSD.next)),
Key([], "XF86MonBrightnessUp", lazy.spawn(OSD.brightup)),
Key([], "XF86MonBrightnessDown", lazy.spawn(OSD.brightdown)),
Key([mod, "shift"], "q", lazy.window.kill()),
Key([mod], "c", lazy.window.center()),
Key([mod], "s", lazy.layout.toggle_split()),
Key([mod], "h", lazy.layout.left(), desc="Move focus to left"),
Key([mod], "l", lazy.layout.right(), desc="Move focus to right"),
Key([mod], "j", lazy.layout.down(), desc="Move focus down"),
Key([mod], "k", lazy.layout.up(), desc="Move focus up"),
Key(
[mod, "shift"], "h", lazy.layout.shuffle_left(), desc="Move window to the left"
),
Key(
[mod, "shift"],
"l",
lazy.layout.shuffle_right(),
desc="Move window to the right",
),
Key([mod, "shift"], "j", lazy.layout.shuffle_down(), desc="Move window down"),
Key([mod, "shift"], "k", lazy.layout.shuffle_up(), desc="Move window up"),
Key([mod, "control"], "h", lazy.layout.grow_left(), desc="Grow window to the left"),
Key(
[mod, "control"], "l", lazy.layout.grow_right(), desc="Grow window to the right"
),
Key([mod, "control"], "j", lazy.layout.grow_down(), desc="Grow window down"),
Key([mod, "control"], "k", lazy.layout.grow_up(), desc="Grow window up"),
Key([mod], "space", lazy.window.toggle_floating()),
Key([mod, "shift"], "space", lazy.window.toggle_fullscreen()),
Key([mod], "Tab", lazy.next_screen()),
]
keys.append(
Key([mod, "shift"], "Tab", lazy.function(send_to_next_screen()))
)
groups = []
land_groups = "123"
port_groups = "456"
# groups.extend([Group(str(i), screen_affinity=(i+1)%2) for i in range(1,7)])
groups.extend([Group(i, screen_affinity=1) for i in land_groups])
groups.extend([Group(i, screen_affinity=0) for i in port_groups])
for i in groups:
keys.extend(
[
# mod1 + letter of group = switch to group
Key(
[mod],
i.name,
lazy.function(go_to_group(land_groups, port_groups, i.name)),
# lazy.group[i.name].toscreen(),
desc="Switch to group {}".format(i.name),
),
# mod1 + shift + letter of group = move focused window to group
Key(
[mod, "shift"],
i.name,
lazy.window.togroup(i.name),
desc="move focused window to group {}".format(i.name),
),
]
)
groups.append(
ScratchPad(
"scratch",
[
DropDown(
"term",
Apps.term,
width=2.0 / 3.0,
height=2.0 / 3.0,
x=1.0 / 6.0,
y=1.0 / 6.0,
),
DropDown(
"pass",
Apps.passmgr,
width=1.0 / 2.0,
height=2.0 / 3.0,
x=1.0 / 4.0,
y=1.0 / 6.0,
),
DropDown(
"music",
Apps.music,
width=2.0 / 3.0,
height=2.0 / 3.0,
x=1.0 / 6.0,
y=1.0 / 6.0,
),
DropDown(
"logout",
Apps.logout,
width=2.0 / 3.0,
height=2.0 / 3.0,
x=1.0 / 6.0,
y=1.0 / 6.0,
)
],
)
)
keys.extend(
[
Key([mod], "grave", lazy.group["scratch"].dropdown_toggle("term")),
Key([mod], "minus", lazy.group["scratch"].dropdown_toggle("pass")),
Key([mod], "equal", lazy.group["scratch"].dropdown_toggle("music")),
Key([mod, "shift"], "e", lazy.group["scratch"].dropdown_toggle("logout")),
]
)
layout_theme = dict(
margin=#GAPS,
border_width=#BORDERWIDTH,
border_focus=[ "#BORDERCOL", "#BORDERFOCUS", "#BORDERCOL", ],
border_normal=["#BORDERCOL", "#BORDERCOL", "#BORDERCOL", ],
)
layouts = [
layout.Bsp(fair=False, margin_on_single=#SINGLE_GAP, border_on_single=True, **layout_theme),
# layout.SmartFloat(**layout_theme),
]
widget_defaults = dict(
font="#FONTFACE",
fontsize=#FONTSIZE,
background="#BGCOL",
foreground="#FGCOL",
)
mouse = [
Drag(
[mod],
"Button1",
lazy.window.set_position_floating(),
start=lazy.window.get_position(),
),
Drag(
[mod], "Button3", lazy.window.set_size_floating(), start=lazy.window.get_size()
),
]
screens = [
Screen(),
Screen(
top=bar.Bar(
[
widget.GroupBox(**widget_defaults),
widget.WindowTabs(**widget_defaults),
widget.Spacer(),
widget.CurrentLayout(**widget_defaults),
widget.Volume(**widget_defaults),
widget.Systray(**widget_defaults),
widget.Clock(**widget_defaults),
],
16,
)
)
]
dgroups_key_binder = None
dgroups_app_rules: List[str] = []
follow_mouse_focus = True
bring_front_click = False
cursor_warp = True
focus_on_window_activation = "smart"
auto_fullscreen = True
floats_kept_above = True
floating_layout = layout.Floating(
float_rules=[
*layout.Floating.default_float_rules,
],
**layout_theme,
)
@hook.subscribe.startup
def autostart():
home = os.path.expanduser("~/.config/qtile/autostart.sh")
subprocess.Popen([home])
# window management hooks
@hook.subscribe.client_new
def float_firefox(client):
wm_class = client.get_wm_class()
if wm_class and "firefox" in wm_class and client.name == "Library":
client.enable_floating()
# @hook.subscribe.client_new
# def fullscreen_wlogout(client):
# if client.name == "wlogout":
# client.enable_floating()
# client.bring_to_front()
@hook.subscribe.focus_change
def always_front():
win = qtile.current_window
if win is not None and win.floating:
win.bring_to_front()
@hook.subscribe.float_change
def centre_floated():
win = qtile.current_window
if (
win is not None
and win.floating
and not win.maximized
and not win.wants_to_fullscreen
and not win.fullscreen
):
qtile.function(centre_float(win, 1.0/6.0*5.0, 1.0/8.0*7.0))
# @hook.subscribe.client_new
# def round_and_transparent(client):
# logger.warning(client)
# logger.warning(type(client))
# logger.warning(client.rounding)
# logger.warning(client.opacity)
# client.rounding = 8
# client.opacity = 0.85

View file

@ -1,78 +0,0 @@
{
"nodes": {
"nixpkgs": {
"locked": {
"lastModified": 1704290814,
"narHash": "sha256-LWvKHp7kGxk/GEtlrGYV68qIvPHkU9iToomNFGagixU=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "70bdadeb94ffc8806c0570eb5c2695ad29f0e421",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-23.05",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-unstable": {
"locked": {
"lastModified": 1704842529,
"narHash": "sha256-OTeQA+F8d/Evad33JMfuXC89VMetQbsU4qcaePchGr4=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "eabe8d3eface69f5bb16c18f8662a702f50c20d5",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"nixpkgs": "nixpkgs",
"nixpkgs-unstable": "nixpkgs-unstable",
"utils": "utils"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1701680307,
"narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "4022d587cbbfd70fe950c1e2083a02621806a725",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
}
},
"root": "root",
"version": 7
}

View file

@ -1,36 +0,0 @@
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-23.05";
nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
utils.url = "github:numtide/flake-utils";
};
outputs = {
self,
nixpkgs,
nixpkgs-unstable,
utils,
...
}:
utils.lib.eachDefaultSystem (
system: let
stable = import nixpkgs {inherit system;};
unstable = import nixpkgs-unstable {inherit system;};
in {
devShell = with unstable;
with unstable.python3Packages;
mkShell {
buildInputs = [
python-lsp-server
mypy
pylsp-mypy
black
pydantic
# coconut
# python3Packages.qtile-extras
python3Packages.qtile
];
};
}
);
}

View file

@ -1,53 +0,0 @@
#!/usr/bin/env python3
from __future__ import annotations
from typing import Callable
from libqtile.log_utils import logger
from libqtile.core.manager import Qtile
def centre_float(win, greater: float, lesser: float) -> Callable:
def _inner(qtile: Qtile) -> None:
win.bring_to_front()
info = qtile.current_screen.info()
width = info["width"]
height = info["height"]
if height > width:
width, height = (width*lesser, height*greater)
else:
width, height = (width*greater, height*lesser)
win.set_size_floating(int(width), int(height))
win.center()
return _inner
def go_to_group(land_groups: str, port_groups: str, name: str) -> Callable:
def _inner(qtile: Qtile) -> None:
if len(qtile.screens) == 1:
qtile.groups_map[name].toscreen()
return
if name in land_groups:
qtile.focus_screen(1)
qtile.groups_map[name].toscreen()
elif name in port_groups:
qtile.focus_screen(0)
qtile.groups_map[name].toscreen()
return _inner
def send_to_next_screen() -> Callable:
def _inner(qtile: Qtile) -> None:
win = qtile.current_window
if win is not None:
screen_to_send = (qtile.current_screen.index+1)%len(qtile.get_screens())
win.toscreen(screen_to_send)
qtile.focus_screen(screen_to_send)
if (
win.floating
and not win.maximized
and not win.wants_to_fullscreen
and not win.fullscreen
):
qtile.function(centre_float(win, 1.0/6.0*5.0, 1.0/8.0*7.0))
return _inner

View file

@ -1,166 +0,0 @@
#!/bin/sh
# This is the example configuration file for river.
#
# If you wish to edit this, you will probably want to copy it to
# $XDG_CONFIG_HOME/river/init or $HOME/.config/river/init first.
#
# See the river(1), riverctl(1), and kile(1) man pages for complete
# documentation.
# Note: the "Super" modifier is also known as Logo, GUI, Windows, Mod4, etc.
# MY BINDS
riverctl map normal Super Return spawn kitty
riverctl map normal Super D spawn fuzzel
riverctl map normal Super E spawn thunar
riverctl map normal Super F spawn firefox
riverctl map normal Super+Shift E spawn wlogout
riverctl map normal Super+Shift S spawn grim -g "$(slurp)" -t png -o ~/Pictures/$(date +%F_%H-%m-%S).png && notify-send "Screenshot taken."
riverctl map normal Super+Shift+Ctrl S spawn kooha
# Super+Q to close the focused view
riverctl map normal Super+Shift Q close
# Super+J and Super+K to focus the next/previous view in the layout stack
riverctl map normal Super J focus-view next
riverctl map normal Super K focus-view previous
# Super+Shift+J and Super+Shift+K to swap the focused view with the next/previous
# view in the layout stack
riverctl map normal Super+Shift J swap next
riverctl map normal Super+Shift K swap previous
# Super+Period and Super+Comma to focus the next/previous output
riverctl map normal Super Period focus-output next
riverctl map normal Super Comma focus-output previous
# Super+Shift+{Period,Comma} to send the focused view to the next/previous output
riverctl map normal Super+Shift Period send-to-output next
riverctl map normal Super+Shift Comma send-to-output previous
# Super+Return to bump the focused view to the top of the layout stack
riverctl map normal Super+Shift Return zoom
# Super+H and Super+L to decrease/increase the main ratio of kile(1)
riverctl map normal Super H send-layout-cmd kile "main-ratio -0.05"
riverctl map normal Super L send-layout-cmd kile "main-ratio +0.05"
# Super+Shift+H and Super+Shift+L to increment/decrement the main count of kile(1)
riverctl map normal Super+Shift H send-layout-cmd kile "main-count +1"
riverctl map normal Super+Shift L send-layout-cmd kile "main-count -1"
# Super+Alt+{H,J,K,L} to move views
riverctl map normal Super+Alt H move left 100
riverctl map normal Super+Alt J move down 100
riverctl map normal Super+Alt K move up 100
riverctl map normal Super+Alt L move right 100
# Super+Alt+Control+{H,J,K,L} to snap views to screen edges
riverctl map normal Super+Alt+Control H snap left
riverctl map normal Super+Alt+Control J snap down
riverctl map normal Super+Alt+Control K snap up
riverctl map normal Super+Alt+Control L snap right
# Super+Alt+Shift+{H,J,K,L} to resize views
riverctl map normal Super+Alt+Shift H resize horizontal -100
riverctl map normal Super+Alt+Shift J resize vertical 100
riverctl map normal Super+Alt+Shift K resize vertical -100
riverctl map normal Super+Alt+Shift L resize horizontal 100
# Super + Left Mouse Button to move views
riverctl map-pointer normal Super BTN_LEFT move-view
# Super + Right Mouse Button to resize views
riverctl map-pointer normal Super BTN_RIGHT resize-view
# Super + Middle Mouse Button to toggle float
riverctl map-pointer normal Super BTN_MIDDLE toggle-float
for i in $(seq 1 9)
do
tags=$((1 << ($i - 1)))
# Super+[1-9] to focus tag [0-8]
riverctl map normal Super $i set-focused-tags $tags
# Super+Shift+[1-9] to tag focused view with tag [0-8]
riverctl map normal Super+Shift $i set-view-tags $tags
# Super+Control+[1-9] to toggle focus of tag [0-8]
riverctl map normal Super+Control $i toggle-focused-tags $tags
# Super+Shift+Control+[1-9] to toggle tag [0-8] of focused view
riverctl map normal Super+Shift+Control $i toggle-view-tags $tags
done
# Super+0 to focus all tags
# Super+Shift+0 to tag focused view with all tags
all_tags=$(((1 << 32) - 1))
riverctl map normal Super 0 set-focused-tags $all_tags
riverctl map normal Super+Shift 0 set-view-tags $all_tags
# Super+Space to toggle float
riverctl map normal Super Space toggle-float
# Super+F to toggle fullscreen
riverctl map normal Super+Shift Space toggle-fullscreen
# Super+{Up,Right,Down,Left} to change layout orientation
riverctl map normal Super Up send-layout-cmd kile "main-location top"
riverctl map normal Super Right send-layout-cmd kile "main-location right"
riverctl map normal Super Down send-layout-cmd kile "main-location bottom"
riverctl map normal Super Left send-layout-cmd kile "main-location left"
# Declare a passthrough mode. This mode has only a single mapping to return to
# normal mode. This makes it useful for testing a nested wayland compositor
riverctl declare-mode passthrough
# Super+F11 to enter passthrough mode
riverctl map normal Super F11 enter-mode passthrough
# Super+F11 to return to normal mode
riverctl map passthrough Super F11 enter-mode normal
# Various media key mapping examples for both normal and locked mode which do
# not have a modifier
for mode in normal locked
do
# Eject the optical drive (well if you still have one that is)
riverctl map $mode None XF86Eject spawn 'eject -T'
# Control pulse audio volume with pamixer (https://github.com/cdemoulins/pamixer)
riverctl map $mode None XF86AudioRaiseVolume spawn 'swayosd --output-volume raise'
riverctl map $mode None XF86AudioLowerVolume spawn 'swayosd --output-volume lower'
riverctl map $mode None XF86AudioMute spawn 'swayosd --output-volume mute-toggle'
# Control MPRIS aware media players with playerctl (https://github.com/altdesktop/playerctl)
riverctl map $mode None XF86AudioMedia spawn 'playerctl play-pause'
riverctl map $mode None XF86AudioPlay spawn 'playerctl play-pause'
riverctl map $mode None XF86AudioPrev spawn 'playerctl previous'
riverctl map $mode None XF86AudioNext spawn 'playerctl next'
# Control screen backlight brightness with light (https://github.com/haikarainen/light)
riverctl map $mode None XF86MonBrightnessUp spawn 'light -A 5'
riverctl map $mode None XF86MonBrightnessDown spawn 'light -U 5'
done
# Set background and border color
riverctl background-color 0x#BGCOLOUR
riverctl border-color-focused 0x#BORDERCOLOUR
riverctl border-color-unfocused 0x#UNFOCUSEDCOLOUR
# Set keyboard repeat rate
riverctl set-repeat 50 300
# Make all views with an app-id that starts with "float" and title "foo" start floating.
# riverctl rule-add float -app-id 'float*' -title 'foo'
# Make all views with app-id "bar" and any title use client-side decorations
# riverctl rule-add csd -app-id "bar"
# Set the default layout generator to be kile and start it.
# River will send the process group of the init executable SIGTERM on exit.
riverctl default-layout kile
kile &

View file

@ -1,7 +0,0 @@
const ver Vertical
const hor Horizontal
const vsplit (ver | hor ([1 - 0.5] *hsplit))
const hsplit (hor | ver ([1 - 0.5] *vsplit))
const default vsplit

View file

@ -1,62 +0,0 @@
{
"$schema": "~/.config/swaync/configSchema.json",
"positionX": "center",
"positionY": "bottom",
"control-center-positionX": "none",
"control-center-positionY": "top",
"control-center-margin-top": 8,
"control-center-margin-bottom": 8,
"control-center-margin-right": 8,
"control-center-margin-left": 8,
"control-center-width": 600,
"control-center-height": 400,
"fit-to-screen": false,
"layer": "overlay",
"cssPriority": "user",
"notification-icon-size": 64,
"notification-body-image-height": 100,
"notification-body-image-width": 200,
"timeout": 6,
"timeout-low": 6,
"timeout-critical": 0,
"notification-window-width": 400,
"keyboard-shortcuts": true,
"image-visibility": "when-available",
"transition-time": 200,
"hide-on-clear": true,
"hide-on-action": true,
"script-fail-notify": true,
"widgets": [
"inhibitors",
"title",
"dnd",
"mpris",
"notifications"
],
"widget-config": {
"inhibitors": {
"text": "Inhibitors",
"button-text": "Clear All",
"clear-all-button": true
},
"title": {
"text": "Notifications",
"clear-all-button": false,
"button-text": "Clear All"
},
"dnd": {
"text": "Do Not Disturb"
},
"label": {
"max-lines": 5,
"text": "Label Text"
},
"mpris": {
"image-size": 96,
"image-radius": 0
}
}
}

View file

@ -1,523 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SwayNotificationCenter JSON schema",
"type": "object",
"additionalProperties": false,
"properties": {
"$schema": {
"type": "string",
"description": "Pointer to the schema against which this document should be validated."
},
"positionX": {
"type": "string",
"description": "Horizontal position of control center and notification window",
"default": "right",
"enum": ["right", "left", "center"]
},
"layer": {
"type": "string",
"description": "Layer of control center window",
"default": "top",
"enum": ["background", "bottom", "top", "overlay"]
},
"cssPriority": {
"type": "string",
"description": "Which GTK priority to use when loading the default and user CSS files. Pick \"user\" to override XDG_CONFIG_HOME/gtk-3.0/gtk.css",
"default": "application",
"enum": ["application", "user"]
},
"positionY": {
"type": "string",
"description": "Vertical position of control center and notification window",
"default": "top",
"enum": ["top", "bottom"]
},
"control-center-positionX": {
"type": "string",
"description": "Optional: Horizontal position of the control center. Supersedes positionX if not set to `none`",
"default": "none",
"enum": ["right", "left", "center", "none"]
},
"control-center-positionY": {
"type": "string",
"description": "Optional: Vertical position of the control center. Supersedes positionY if not set to `none`",
"default": "none",
"enum": ["top", "bottom", "none"]
},
"control-center-margin-top": {
"type": "integer",
"description": "The margin (in pixels) at the top of the notification center. 0 to disable",
"default": 0
},
"control-center-margin-bottom": {
"type": "integer",
"description": "The margin (in pixels) at the bottom of the notification center. 0 to disable",
"default": 0
},
"control-center-margin-right": {
"type": "integer",
"description": "The margin (in pixels) at the right of the notification center. 0 to disable",
"default": 0
},
"control-center-margin-left": {
"type": "integer",
"description": "The margin (in pixels) at the left of the notification center. 0 to disable",
"default": 0
},
"notification-icon-size": {
"type": "integer",
"description": "The notification icon size (in pixels)",
"default": 64,
"minimum": 16
},
"notification-body-image-height": {
"type": "integer",
"description": "The notification body image height (in pixels)",
"default": 100,
"minimum": 100
},
"notification-body-image-width": {
"type": "integer",
"description": "The notification body image width (in pixels)",
"default": 200,
"minimum": 200
},
"timeout": {
"type": "integer",
"description": "The notification timeout for notifications with normal priority",
"default": 10
},
"timeout-low": {
"type": "integer",
"description": "The notification timeout for notifications with low priority",
"default": 5
},
"timeout-critical": {
"type": "integer",
"description": "The notification timeout for notifications with critical priority. 0 to disable",
"default": 0
},
"notification-window-width": {
"type": "integer",
"description": "Width of the notification in pixels",
"default": 500
},
"fit-to-screen": {
"type": "boolean",
"description": "If the control center should expand to both edges of the screen",
"default": true
},
"control-center-height": {
"type": "integer",
"description": "Height of the control center in pixels. Ignored when 'fit-to-screen' is set to 'true'",
"default": 600,
"minimum": 300
},
"control-center-width": {
"type": "integer",
"description": "Width of the control center in pixels",
"default": 500,
"minimum": 300
},
"keyboard-shortcuts": {
"type": "boolean",
"description": "If control center should use keyboard shortcuts",
"default": true
},
"image-visibility": {
"type": "string",
"description": "An explanation about the purpose of this instance.",
"default": "when-available",
"enum": ["always", "when-available", "never"]
},
"transition-time": {
"type": "integer",
"description": "The notification animation duration. 0 to disable",
"default": 200
},
"hide-on-clear": {
"type": "boolean",
"description": "Hides the control center after pressing \"Clear All\"",
"default": false
},
"hide-on-action": {
"type": "boolean",
"description": "Hides the control center when clicking on notification action",
"default": true
},
"script-fail-notify": {
"type": "boolean",
"description": "Sends a notification if a script fails to run",
"default": true
},
"scripts": {
"type": "object",
"description": "Which scripts to check and potentially run for every notification. If the notification doesn't include one of the properties, that property will be ignored. All properties (except for exec) use regex. If all properties match the given notification, the script will be run. Only the first matching script will be run.",
"minProperties": 1,
"additionalProperties": false,
"patternProperties": {
"^.{1,}$": {
"type": "object",
"description": "Your script object.",
"required": ["exec"],
"minProperties": 2,
"additionalProperties": false,
"properties": {
"exec": {
"type": "string",
"description": "The script to run. Can also run regular shell commands."
},
"app-name": {
"type": "string",
"description": "The app-name. Uses Regex."
},
"desktop-entry": {
"type": "string",
"description": "The desktop-entry. Uses Regex."
},
"summary": {
"type": "string",
"description": "The summary of the notification. Uses Regex."
},
"body": {
"type": "string",
"description": "The body of the notification. Uses Regex."
},
"urgency": {
"type": "string",
"description": "The urgency of the notification.",
"default": "Normal",
"enum": ["Low", "Normal", "Critical"]
},
"category": {
"type": "string",
"description": "Which category the notification belongs to. Uses Regex."
},
"run-on": {
"type": "string",
"description": "Whether to run the script on an action being activated, or when the notification is received.",
"enum": ["action", "receive"],
"default": "receive"
}
}
}
}
},
"notification-visibility": {
"type": "object",
"description": "Set the visibility of each incoming notification. If the notification doesn't include one of the properties, that property will be ignored. All properties (except for state) use regex. If all properties match the given notification, the notification will be follow the provided state. Only the first matching object will be used.",
"minProperties": 1,
"additionalProperties": false,
"patternProperties": {
"^.{1,}$": {
"type": "object",
"description": "Your script object.",
"required": ["state"],
"minProperties": 2,
"additionalProperties": false,
"properties": {
"state": {
"type": "string",
"description": "The notification visibility state.",
"default": "enabled",
"enum": ["ignored", "muted", "enabled", "transient"]
},
"app-name": {
"type": "string",
"description": "The app-name. Uses Regex."
},
"desktop-entry": {
"type": "string",
"description": "The desktop-entry. Uses Regex."
},
"summary": {
"type": "string",
"description": "The summary of the notification. Uses Regex."
},
"body": {
"type": "string",
"description": "The body of the notification. Uses Regex."
},
"urgency": {
"type": "string",
"description": "The urgency of the notification.",
"default": "Normal",
"enum": ["Low", "Normal", "Critical"]
},
"override-urgency": {
"type": "string",
"description": "The new urgency of the notification (optional)",
"default": "unset",
"enum": ["unset", "low", "normal", "critical"]
},
"category": {
"type": "string",
"description": "Which category the notification belongs to. Uses Regex."
}
}
}
}
},
"widgets": {
"type": "array",
"description": "Which order and which widgets to display. If the \"notifications\" widget isn't specified, it will be placed at the bottom.",
"default": ["inhibitors", "title", "dnd", "notifications"],
"items": {
"type": "string",
// Sadly can't use regex and enums at the same time. Fix in the future?
"pattern": "^[a-zA-Z0-9_-]{1,}(#[a-zA-Z0-9_-]{1,}){0,1}?$"
}
},
"widget-config": {
"type": "object",
"description": "Configure specific widget properties.",
"additionalProperties": false,
"patternProperties": {
// New widgets go here
"^title(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
// References the widget structure from "widgets" below
"$ref": "#/widgets/title"
},
"^dnd(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
"$ref": "#/widgets/dnd"
},
"^label(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
"$ref": "#/widgets/label"
},
"^mpris(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
"$ref": "#/widgets/mpris"
},
"^buttons-grid(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
"$ref": "#/widgets/buttons-grid"
},
"^menubar(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
"$ref": "#/widgets/menubar"
},
"^volume(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
"$ref": "#/widgets/volume"
},
"^backlight(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
"$ref": "#/widgets/backlight"
},
"^inhibitors(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
// References the widget structure from "widgets" below
"$ref": "#/widgets/inhibitors"
}
}
}
},
"widgets": {
// New widgets go here
"title": {
"type": "object",
"description": "Control Center Title Widget",
"additionalProperties": false,
"properties": {
"text": {
"type": "string",
"description": "The title of the widget",
"default": "Notifications"
},
"clear-all-button": {
"type": "boolean",
"description": "Wether to display a \"Clear All\" button",
"default": true
},
"button-text": {
"type": "string",
"description": "\"Clear All\" button text",
"default": "Clear All"
}
}
},
"dnd": {
"type": "object",
"description": "Control Center Do Not Disturb Widget",
"additionalProperties": false,
"properties": {
"text": {
"type": "string",
"description": "The title of the widget",
"default": "Do Not Disturb"
}
}
},
"label": {
"type": "object",
"description": "A generic widget that allows the user to add custom text",
"additionalProperties": false,
"properties": {
"text": {
"type": "string",
"description": "The text content of the widget",
"default": "Label Text"
},
"max-lines": {
"type": "integer",
"description": "The maximum lines",
"default": 5
}
}
},
"mpris": {
"type": "object",
"description": "A widget that displays multiple music players",
"additionalProperties": false,
"properties": {
"image-size": {
"type": "integer",
"description": "The size of the album art",
"default": 96
},
"image-radius": {
"type": "integer",
"description": "The border radius of the album art",
"default": 12
}
}
},
"buttons-grid": {
"type": "object",
"description": "A widget to add a grid of buttons that execute shell commands",
"additionalProperties": false,
"properties": {
"actions": {
"type": "array",
"description": "A list of actions containing a label and a command",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string",
"description": "Text to be displayed in button",
"default": "label"
},
"command": {
"type": "string",
"description": "Command to be executed on click",
"default": ""
}
}
}
}
}
},
"menubar": {
"type": "object",
"description": "A bar that contains action-buttons and buttons to open a dropdown with action-buttons",
"additionalProperties": false,
"patternProperties": {
"^menu(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
"type": "object",
"description": "A button that opens a dropdown with action-buttons",
"additionalProperties": false,
"properties": {
"label": {
"type": "string",
"description": "Text to be displayed in button",
"default": "Menu"
},
"position": {
"type": "string",
"description": "Horizontal position of the button in the bar",
"default": "right",
"enum": ["right", "left"]
},
"animation_type": {
"type": "string",
"default": "slide_down",
"description": "Animation type for menu",
"enum": ["slide_down", "slide_up", "none"]
},
"animation_duration":{
"type": "integer",
"default": 250,
"description": "Duration of animation in milliseconds"
},
"actions": {
"$ref" : "#/widgets/buttons-grid/properties/actions"
}
}
},
"^buttons(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
"type": "object",
"description": "A list of action-buttons to be displayed in the topbar",
"additionalProperties": false,
"properties": {
"position": {
"type": "string",
"description": "Horizontal position of the button in the bar",
"default": "right",
"enum": ["right", "left"]
},
"actions": {
"$ref" : "#/widgets/buttons-grid/properties/actions"
}
}
}
}
},
"volume": {
"type": "object",
"description": "Slider to control pulse volume",
"additionalProperties": false,
"properties": {
"label": {
"type": "string",
"description": "Text displayed in front of the volume slider",
"default": "Volume"
}
}
},
"backlight": {
"type": "object",
"description": "Slider to control monitor brightness",
"additionalProperties": false,
"properties": {
"label": {
"type": "string",
"description": "Text displayed in front of the backlight slider",
"default": "Brightness"
},
"device": {
"type": "string",
"description": "Name of monitor (find possible devices using `ls /sys/class/backlight` or `ls /sys/class/leds`)",
"default": "intel_backlight"
},
"subsystem": {
"type": "string",
"description": "Kernel subsystem for brightness control",
"default": "backlight",
"enum": ["backlight", "leds"]
},
"min": {
"type": "integer",
"default": 0,
"description": "Lowest possible value for brightness"
}
}
},
"inhibitors": {
"type": "object",
"description": "Control Center Inhibitors Widget",
"additionalProperties": false,
"properties": {
"text": {
"type": "string",
"description": "The title of the widget",
"default": "Inhibitors"
},
"clear-all-button": {
"type": "boolean",
"description": "Wether to display a \"Clear All\" button",
"default": true
},
"button-text": {
"type": "string",
"description": "\"Clear All\" button text",
"default": "Clear All"
}
}
}
}
}

View file

@ -1,348 +0,0 @@
/*
* vim: ft=less
*/
@define-color cc-bg #PANELBG;
@define-color noti-border-color #COLBORDER;
@define-color noti-bg #NOTIBGNORM;
@define-color noti-bg-hover #NOTIBGHOVER;
@define-color noti-bg-focus #NOTIBGFOCUS;
@define-color noti-close-bg #NOTIBGCLOSE;
@define-color noti-close-bg-hover #NOTIBGHVERCLOSE;
@define-color bg-selected #BGSELECTED;
* {
font-family: "#FONT", sans-serif;
}
.notification-row {
transition: all 200ms ease;
outline: none;
margin-bottom: 4px;
border-radius: #ROUNDINGpx;
}
.control-center .notification-row:focus,
.control-center .notification-row:hover {
opacity: 1;
background: transparent;
}
.notification-row:focus .notification,
.notification-row:hover .notification {
// box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.5);
// box-shadow: 0px 0px 0px 3px @bg-selected;
}
.control-center .notification {
box-shadow: none;
}
.control-center .notification-row {
opacity: 0.5;
}
.notification {
transition: all 200ms ease;
border-radius: #ROUNDINGpx;
margin: 6px 6px;
// box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.5);
padding: 0;
}
/* Uncomment to enable specific urgency colors
.low {
background: yellow;
padding: 6px;
border-radius: 24px;
}
.normal {
background: green;
padding: 6px;
border-radius: 24px;
}
.critical {
background: red;
padding: 6px;
border-radius: 24px;
}
*/
.notification-content {
background: transparent;
padding: 6px;
border-radius: #ROUNDINGpx;
}
.close-button {
background: @noti-close-bg;
color: white;
text-shadow: none;
padding: 0;
border-radius: 100%;
margin-top: 10px;
margin-right: 10px;
box-shadow: none;
border: none;
min-width: 24px;
min-height: 24px;
}
.close-button:hover {
box-shadow: none;
background: @noti-close-bg-hover;
transition: all 0.15s ease-in-out;
border: none;
}
.notification-default-action,
.notification-action {
padding: 4px;
margin: 0;
box-shadow: none;
background: @noti-bg;
border: #BORDERpx solid @noti-border-color;
color: white;
transition: all 200ms ease;
}
.notification-default-action:hover,
.notification-action:hover {
-gtk-icon-effect: none;
background: @noti-bg-hover;
}
.notification-default-action {
border-radius: #ROUNDINGpx;
}
/* When alternative actions are visible */
.notification-default-action:not(:only-child) {
border-bottom-left-radius: 0px;
border-bottom-right-radius: 0px;
}
.notification-action {
border-radius: #ROUNDINGpx;
border-top: none;
border-right: none;
}
/* add bottom border radius to eliminate clipping */
.notification-action:first-child {
border-bottom-left-radius: #ROUNDINGpx;
}
.notification-action:last-child {
border-bottom-right-radius: #ROUNDINGpx;
border-right: #BORDERpx solid @noti-border-color;
}
.image {
}
.body-image {
margin-top: 6px;
background-color: white;
border-radius: #ROUNDINGpx;
}
.summary {
font-size: 16px;
font-weight: bold;
background: transparent;
color: white;
text-shadow: none;
}
.time {
font-size: 16px;
font-weight: bold;
background: transparent;
color: white;
text-shadow: none;
margin-right: 18px;
}
.body {
font-size: 15px;
font-weight: normal;
background: transparent;
color: white;
text-shadow: none;
}
.control-center {
background: @cc-bg;
border-radius: #ROUNDINGpx;
background-clip: border-box;
padding: 4px;
// box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.3), 0 1px 3px 1px rgba(0, 0, 0, 0.7),
// 0 2px 6px 2px rgba(0, 0, 0, 0.3);
}
.control-center-list {
background: transparent;
}
.control-center-list-placeholder {
opacity: 0.5;
}
.floating-notifications {
background: transparent;
}
/* Window behind control center and on all other monitors */
.blank-window {
background: transparent;
}
/*** Widgets ***/
/* Title widget */
.widget-title {
margin: 8px;
font-size: 1.3rem;
}
.widget-title > button {
font-size: initial;
color: white;
text-shadow: none;
background: @noti-bg;
border: #BORDERpx solid @noti-border-color;
box-shadow: none;
border-radius: #ROUNDINGpx;
}
.widget-title > button:hover {
background: @noti-bg-hover;
}
/* DND widget */
.widget-dnd {
margin: 8px;
font-size: 1.1rem;
}
.widget-dnd > switch {
font-size: initial;
border-radius: #ROUNDINGpx;
background: @noti-bg;
border: #BORDERpx solid @noti-border-color;
box-shadow: none;
}
.widget-dnd > switch:checked {
background: @bg-selected;
}
.widget-dnd > switch slider {
background: @noti-bg-hover;
border-radius: #ROUNDINGpx;
}
/* Label widget */
.widget-label {
margin: 8px;
}
.widget-label > label {
font-size: 1.1rem;
}
/* Mpris widget */
.widget-mpris {
/* The parent to all players */
}
.widget-mpris-player {
padding: 8px;
margin: 8px;
background-color: @noti-bg;
border-radius: #ROUNDINGpx;
}
.widget-mpris-title {
font-weight: bold;
font-size: 1.25rem;
}
.widget-mpris-subtitle {
font-size: 1.1rem;
}
/* Buttons widget */
.widget-buttons-grid {
padding: 8px;
margin: 8px;
border-radius: #ROUNDINGpx;
background-color: @noti-bg;
}
.widget-buttons-grid>flowbox>flowboxchild>button{
background: @noti-bg;
border-radius: #ROUNDINGpx;
}
.widget-buttons-grid>flowbox>flowboxchild>button:hover {
background: @noti-bg-hover;
}
/* Menubar widget */
.widget-menubar>box>.menu-button-bar>button {
border: none;
background: transparent;
}
/* .AnyName { Name defined in config after #
background-color: @noti-bg;
padding: 8px;
margin: 8px;
border-radius: 24px;
}
.AnyName>button {
background: transparent;
border: none;
}
.AnyName>button:hover {
background-color: @noti-bg-hover;
} */
.topbar-buttons>button { /* Name defined in config after # */
border: none;
background: transparent;
}
/* Volume widget */
.widget-volume {
background-color: @noti-bg;
padding: 8px;
margin: 8px;
border-radius: #ROUNDINGpx;
}
/* Backlight widget */
.widget-backlight {
background-color: @noti-bg;
padding: 8px;
margin: 8px;
border-radius: #ROUNDINGpx;
}
/* Title widget */
.widget-inhibitors {
margin: 8px;
font-size: 1.5rem;
}
.widget-inhibitors > button {
font-size: initial;
color: white;
text-shadow: none;
background: @noti-bg;
border: #BORDERpx solid @noti-border-color;
box-shadow: none;
border-radius: #ROUNDINGpx;
}
.widget-inhibitors > button:hover {
background: @noti-bg-hover;
}

View file

@ -1,83 +0,0 @@
# nix fix
import sys
import os.path
if os.path.exists(f"{$HOME}/.nix-profile") and not __xonsh__.env.get("NIX_PATH"):
$NIX_REMOTE="daemon"
$NIX_USER_PROFILE_DIR="/nix/var/nix/profiles/per-user/" + $USER
$NIX_PROFILES="/nix/var/nix/profiles/default " + $HOME + "/.nix-profile"
$NIX_SSL_CERT_FILE="/etc/ssl/certs/ca-certificates.crt"
$NIX_PATH="nixpkgs=/nix/var/nix/profiles/per-user/root/channels/nixpkgs:/nix/var/nix/profiles/per-user/root/channels"
$PATH += [f"{$HOME}/.nix-profile/bin", "/nix/var/nix/profiles/default/bin"]
new_paths = [#NEWPATHS]
# new_paths = new_paths + list(map(lambda s: str(s.resolve()), p"~/.local/lib/".glob("python*/site-packages")))
for p in new_paths:
if p not in sys.path:
sys.path.append(p)
$PYTHONPATH.append(p)
# prompt
execx($(/run/current-system/sw/bin/starship init xonsh --print-full-init))
# zjump
execx($(zoxide init xonsh), 'exec', __xonsh__.ctx, filename='zoxide')
# envs
$AUTO_CONTINUE = True
$AUTO_CD = True
$DOTGLOB = True
$GLOB_SORTED = True
$INDENT = ' '
$AUTO_SUGGEST = True
$AUTO_SUGGEST_IN_COMPLETIONS = True
$VI_MODE = True
$XONSH_AUTOPAIR = True
$XONSH_COPY_ON_DELETE = True
$ALIAS_COMPLETIONS_OPTIONS_BY_DEFAULT = True
$CASE_SENSITIVE_COMPLETIONS = False
$COMPLETIONS_BRACKETS = True
$COMPLETION_IN_THREAD = True
# aliases
def la_alias(dir=""):
exa -lha --icons --group-directories-first --color=always @(dir) | do_culr
def l_alias(dir=""):
exa -lh --icons --group-directories-first --color=always @(dir) | do_culr
def p_alias(opts=""):
ps ww @(opts) | do_culr
def mnt_alias():
mount | column -t | do_culr
def fresh_alias():
clear
echo
~/.nix/header.sh
aliases["fresh"] = fresh_alias
aliases["icat"] = [ "kitty", "+kitten", "icat" ]
aliases["chmox"] = [ "chmod", "+x" ]
aliases["gs"] = [ "git", "status" ]
aliases["gcl"] = [ "git", "clone" ]
aliases["ga"] = [ "git", "add" ]
aliases["gcb"] = [ "git", "checkout", "-b" ]
aliases["gco"] = [ "git", "checkout" ]
aliases["gl"] = [ "git", "pull" ]
aliases["gp"] = [ "git", "push" ]
aliases["gd"] = [ "git", "diff" ]
aliases["gcam"] = [ "git", "commit", "-am" ]
aliases["gcm"] = [ "git", "commit", "-m" ]
aliases["gr"] = [ "git", "restore" ]
aliases["gm"] = [ "git", "merge" ]
aliases["p"] = p_alias
aliases["l"] = l_alias
aliases["la"] = la_alias
aliases["mnt"] = mnt_alias
aliases["zz"] = [ "z", "$(xplr)" ]
aliases["do_culr"] = [ "culr", "-t", "80", "-o", "roygbiv-split" ]
# alias kaboom='printf "type any input if you wish to update\n\npress enter to continue\n"; read upgrade; if [ -n "$upgrade" ]; then echo upgrading..; sudo nix-channel --update; else echo no upgrade!; fi; sudo nixos-rebuild switch -j9 && rm ~/.gtkrc-2.0; home-manager switch && sudo nix-collect-garbage && nix-store --optimise'
# greet
fresh

View file

@ -1,63 +0,0 @@
# nix fix
import os.path
if os.path.exists(f"{$HOME}/.nix-profile") and not __xonsh__.env.get("NIX_PATH"):
$NIX_REMOTE="daemon"
$NIX_USER_PROFILE_DIR="/nix/var/nix/profiles/per-user/" + $USER
$NIX_PROFILES="/nix/var/nix/profiles/default " + $HOME + "/.nix-profile"
$NIX_SSL_CERT_FILE="/etc/ssl/certs/ca-certificates.crt"
$NIX_PATH="nixpkgs=/nix/var/nix/profiles/per-user/root/channels/nixpkgs:/nix/var/nix/profiles/per-user/root/channels"
$PATH += [f"{$HOME}/.nix-profile/bin", "/nix/var/nix/profiles/default/bin"]
# prompt
execx($(/run/current-system/sw/bin/starship init xonsh --print-full-init))
# envs
$AUTO_CONTINUE = True
$AUTO_CD = True
$DOTGLOB = True
$GLOB_SORTED = True
$INDENT = ' '
$AUTO_SUGGEST = True
$AUTO_SUGGEST_IN_COMPLETIONS = True
$VI_MODE = True
$XONSH_AUTOPAIR = True
$XONSH_COPY_ON_DELETE = True
$ALIAS_COMPLETIONS_OPTIONS_BY_DEFAULT = True
$CASE_SENSITIVE_COMPLETIONS = False
$COMPLETIONS_BRACKETS = True
$COMPLETION_IN_THREAD = True
# aliases
def la_culr(dir=""):
exa -lha --icons --group-directories-first --color=always @(dir) | culr -t 80 -o roygbiv-split
def ls_culr(dir=""):
exa -lh --icons --group-directories-first --color=always @(dir) | culr -t 80 -o roygbiv-split
def ps_culr(opts=""):
ps ww @(opts) | culr -t 80 -o roygbiv-split
aliases["fresh"] = [ "clear;", "echo;", "~/.nix/header.sh" ]
aliases["icat"] = [ "kitty", "+kitten", "icat" ]
aliases["chmox"] = [ "chmod", "+x" ]
aliases["gs"] = [ "git", "status" ]
aliases["gcl"] = [ "git", "clone" ]
aliases["ga"] = [ "git", "add" ]
aliases["gcb"] = [ "git", "checkout", "-b" ]
aliases["gco"] = [ "git", "checkout" ]
aliases["gl"] = [ "git", "pull" ]
aliases["gp"] = [ "git", "push" ]
aliases["gd"] = [ "git", "diff" ]
aliases["gcam"] = [ "git", "commit", "-am" ]
aliases["gcm"] = [ "git", "commit", "-m" ]
aliases["gr"] = [ "git", "restore" ]
aliases["gm"] = [ "git", "merge" ]
aliases["l"] = [ "ls_culr" ]
aliases["la"] = [ "la_culr" ]
aliases["p"] = [ "ps_culr" ]
aliases["mnt"] = [ "mount", "|", "column", "-t", "|", "culr", "-t", "80", "-o", "roygbiv-split" ]
aliases["zz"] = [ "z", "$(xplr)" ]
# alias kaboom='printf "type any input if you wish to update\n\npress enter to continue\n"; read upgrade; if [ -n "$upgrade" ]; then echo upgrading..; sudo nix-channel --update; else echo no upgrade!; fi; sudo nixos-rebuild switch -j9 && rm ~/.gtkrc-2.0; home-manager switch && sudo nix-collect-garbage && nix-store --optimise'
# greet
fresh

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

View file

@ -1,68 +0,0 @@
# Eww configuration
This configuration aims to provide a fully working shell replacement for
compositors/window managers. Features constantly get added and existing ones
get improved.
## 🗃️ Components
The same daemon runs multiple windows which interact with each other:
### bar
![bar](https://user-images.githubusercontent.com/36706276/216402839-0f8ec9b0-dc4b-4cb8-9834-db59b61db97f.png)
### music window
![music](https://user-images.githubusercontent.com/36706276/192146077-f8da4691-9a0c-487f-9805-3fd4d55551e9.gif)
### calendar
![calendar](https://user-images.githubusercontent.com/36706276/204923748-f5c7db3a-5000-40cf-ba41-cd2d5f14146a.png)
### system info
![system](https://user-images.githubusercontent.com/36706276/216403137-a3231c60-976a-4e5d-85c0-899679ab0a92.png)
## ❔ Usage
### Home Manager
If you use Home Manager, installing is as simple as adding my flake to your
inputs, passing `inputs` to `extraSpecialArgs` and importing the relevant
module:
```nix
{inputs, ...}: {
imports = [inputs.fufexan.homeManagerModules.eww-hyprland];
programs.eww-hyprland = {
enable = true;
# default package
package = pkgs.eww-wayland;
# if you want to change colors
colors = builtins.readFile ./macchiato.scss;
# set to true to reload on change
autoReload = false;
};
}
```
Make sure to also add the fonts listed below.
### Other distros
To quickly install this config, grab all the files in this directory and put
them in `~/.config/eww`. Then run `eww daemon` and `eww open bar`. Enjoy!
Dependencies:
- Icon fonts: `material-symbols-outline` (any variation can be used as long as you change the `font-family` property of `.icon`)
- Text font: [Jost](https://fonts.google.com/specimen/Jost)
- Script deps: everything in `default.nix`'s `dependencies` list.
## 🎨 Theme
The theme colors can be changed in `css/_colors.scss`. Currently the theme used
is [Catppuccin Mocha](https://github.com/catppuccin/catppuccin).

View file

@ -1,31 +0,0 @@
.calendar-win {
@include window;
background-color: $bg;
color: $fg;
padding: .2em;
}
calendar {
padding: 5px;
:selected {
color: $magenta;
}
.header {
color: $black;
}
.highlight {
color: $red;
font-weight: bold;
}
.button {
color: $blue;
}
:indeterminate {
color: $green;
}
}

View file

@ -1,35 +0,0 @@
$rosewater: #f5e0dc;
$flamingo: #f2cdcd;
$pink: #f5c2e7;
$mauve: #cba6f7;
$red: #f38ba8;
$maroon: #eba0ac;
$peach: #fab387;
$yellow: #f9e2af;
$green: #a6e3a1;
$teal: #94e2d5;
$sky: #89dceb;
$sapphire: #74c7ec;
$blue: #89b4fa;
$lavender: #b4befe;
$text: #cdd6f4;
$subtext1: #bac2de;
$subtext0: #a6adc8;
$overlay2: #9399b2;
$overlay1: #7f849c;
$overlay0: #6c7086;
$surface2: #585b70;
$surface1: #45475a;
$surface0: #313244;
$base: #1e1e2e;
$mantle: #181825;
$crust: #11111b;
$fg: $text;
$bg: rgba(30, 30, 46, 0.6);
$bg1: rgba(49, 50, 68, 0.6);
$border: #28283d;
$shadow: $crust;

View file

@ -1,66 +0,0 @@
.song-cover-art {
@include rounding;
background-position: center;
background-size: cover;
margin: 4px 5px 4px 0;
min-height: 24px;
min-width: 24px;
}
.music-window {
@include window;
background-color: $bg;
border: 1px solid $border;
color: $fg;
}
.music-cover-art {
background-position: center;
background-size: cover;
border-radius: 8px;
margin: 1em;
min-height: 170px;
min-width: 170px;
}
.music-box {
margin: 1rem 1rem 1rem 0;
}
.music-title {
font-size: 1.1rem;
font-weight: bold;
}
.music-artist {
color: $white_a;
}
.music-button label {
color: $white_a;
font-size: 2rem;
}
.music-time {
color: $white_a;
margin: 0 1rem;
}
.music-bar scale {
highlight {
background-image: linear-gradient(to right, $cyan, $blue_a);
border-radius: 24px;
}
trough {
background-color: $bg1;
border-radius: 24px;
margin-top: 0;
min-height: 10px;
min-width: 170px;
}
}
.playctl {
color: $yellow;
}

View file

@ -1,36 +0,0 @@
.osd-part {
@include window;
background: $bg;
margin: 0 .5rem .5rem;
label {
color: $text;
font-size: 2rem;
margin: 0 .1rem 0 .2rem;
}
scale {
margin: -.2rem 0;
}
trough {
@include rounding;
background-color: $bg1;
margin: 1rem 0 .5rem;
min-height: 10rem;
min-width: .7rem;
highlight {
@include rounding;
min-width: 0;
}
}
}
.osd-volume highlight {
background-image: linear-gradient(to top, $cyan, $blue_a);
}
.osd-brightness highlight {
background-image: linear-gradient(to top, $yellow, $yellow_a);
}

View file

@ -1,127 +0,0 @@
.system-menu-box {
@include window;
background-color: $bg;
color: $text;
}
.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;
}
}
}
.system-row {
margin: .5rem .7rem;
.airplane-box button {
padding: 1rem 3rem;
}
label {
font-size: 1rem;
margin: 0 .1rem;
}
}
.element {
@include rounding;
background-color: $black;
margin: .3rem;
button {
@include rounding;
padding: 1rem;
label {
font-size: 1.5rem;
}
&:hover {
background-color: $cyan_a;
}
}
}
.sliders {
@include rounding;
background-color: $black;
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: $base; }
}
.volume-bar highlight {
@include rounding;
background-image: linear-gradient(to right, $cyan, $blue_a);
}
.brightness-slider-box scale highlight {
@include rounding;
background-image: linear-gradient(to right, $yellow, $yellow_a);
}
.bottom-row {
margin: .5rem 1rem;
.battery-icon { font-size: 2rem; }
.battery-wattage { color: $magenta; }
.battery-status {
color: $green;
margin: 0 .5rem;
}
button {
background-color: $black;
border-radius: 50%;
margin-bottom: .1rem;
padding: 0 .5rem;
label { font-size: 1.5rem; }
&:hover { background-color: $black_a; }
}
}
.bt-connected {
background-color: $blue;
color: $red;
button:hover { background-color: rgba(0, 0, 0, .1); }
}
.wifi-connected {
background-color: $magenta;
color: $red;
button:hover { background-color: rgba(0, 0, 0, .1); }
}

View file

@ -1,80 +0,0 @@
* {
transition: 1s;
}
.membar {
color: $yellow;
}
.cpubar {
color: $blue;
}
.batbar {
color: $green;
}
.membar,
.cpubar,
.batbar {
background-color: $bg1;
}
.iconmem {
color: $yellow;
}
.iconcpu {
color: $blue;
}
.icon-text {
font-size: 3rem;
padding: .7rem;
}
.sys-text-sub {
color: $text;
}
.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: $black;
margin: .5rem 1rem;
padding: .5rem;
}
.sys-mem,
.sys-cpu {
background-color: $bg;
}
.sys-icon-mem,
.sys-text-mem,
.sys-mem {
color: $yellow;
}
.sys-icon-cpu,
.sys-text-cpu,
.sys-cpu {
color: $blue;
}
.sys-box {
margin: .3em;
box { margin-left: 1rem; }
}

View file

@ -1,5 +0,0 @@
.vol-icon { color: $green; }
.volbar highlight {
background-image: linear-gradient(to right, $cyan, $blue_a);
border-radius: 10px;
}

View file

@ -1,119 +0,0 @@
{
config,
pkgs,
lib,
...
}: let
dependencies = with pkgs; [
cfg.package
bash
bc
coreutils
dbus
findutils
gawk
gnome.gnome-control-center
gnused
gojq
imagemagick
jaq
light
networkmanager
playerctl
procps
pulseaudio
ripgrep
socat
udev
upower
util-linux
wget
wireplumber
wlogout
swaynotificationcenter
];
reload_script = pkgs.writeShellScript "reload_eww" ''
windows=$(eww windows | rg '\*' | tr -d '*')
systemctl --user restart eww.service
echo $windows | while read -r w; do
eww open $w
done
'';
cfg = config.programs.eww-custom;
in {
options.programs.eww-custom = {
enable = lib.mkEnableOption "eww config";
package = lib.mkOption {
type = with lib.types; nullOr package;
default = pkgs.eww-wayland;
defaultText = lib.literalExpression "pkgs.eww-wayland";
description = "Eww package to use.";
};
autoReload = lib.mkOption {
type = lib.types.bool;
default = true;
defaultText = lib.literalExpression "false";
description = "Whether to restart the eww daemon and windows on change.";
};
colors = lib.mkOption {
type = with lib.types; nullOr lines;
default = null;
defaultText = lib.literalExpression "null";
description = ''
SCSS file with colors defined in the same arbitrary and stupid way as Cringepuccin colors are,
to be used by eww.
'';
};
};
config = lib.mkIf cfg.enable {
home.packages = [cfg.package];
# remove nix files
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 ./.;
};
# links each file individually, which lets us insert the colors file separately
recursive = true;
onChange =
if cfg.autoReload
then reload_script.outPath
else "";
};
# colors file
xdg.configFile."eww/css/_colors.scss".text =
if cfg.colors != null
then cfg.colors
else (builtins.readFile ./css/_colors.scss);
systemd.user.services.eww = {
Unit = {
Description = "Eww Daemon";
# not yet implemented
# PartOf = ["tray.target"];
PartOf = ["graphical-session.target"];
};
Service = {
Environment = "PATH=/run/wrappers/bin:${lib.makeBinPath dependencies}";
ExecStart = "${cfg.package}/bin/eww daemon --no-daemonize";
Restart = "on-failure";
};
Install.WantedBy = ["graphical-session.target"];
};
};
}

View file

@ -1,94 +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 0px;
@include rounding;
}
* {
all: unset;
font-family: "Inria Sans", Roboto, sans-serif;
transition: 200ms ease;
}
@import 'css/calendar';
@import 'css/music';
@import 'css/osd';
@import 'css/sidebar';
@import 'css/system';
@import 'css/volume';
.bar {
color: $fg;
label {
font-size: 1rem;
}
}
.vis {
background-color: $bg;
border-radius: 0px;
padding: 0px 0px;
margin-top: 0px;
margin-bottom: 0px;
border: 0px;
// 3px solid $outline;
}
.invis {
background-color: rgba(0, 0, 0, 0);
}
tooltip {
background: $bg;
border: 1px solid $border;
border-radius: 8px;
label {
font-size: 1rem;
}
}
.icon,
.icon label { font-family: Material Symbols Outlined; }
.module { margin: 0 5px; }
.hour {
padding-left: 5px;
}
.minute {
padding-right: .7rem;
}
.date {
background: $bg;
color: $yellow;
label {
font-size: 1.2rem;
}
}
.bright-icon { color: $yellow_a; }
.module-bt { font-size: 1.2rem; }
scale trough {
background-color: $bg;
border-radius: 24px;
margin: 0 1rem;
min-height: 10px;
min-width: 70px;
}
.workspaces {
margin-left: 10px;
button { transition: color 2s ease; }
}

View file

@ -1,56 +0,0 @@
(include "./modules/clock.yuck")
(include "./modules/music.yuck")
(include "./modules/net.yuck")
(include "./modules/sys.yuck")
(include "./modules/variables.yuck")
(include "./modules/volume.yuck")
(include "./modules/workspaces.yuck")
(include "./modules/current_win.yuck")
(include "./windows/calendar.yuck")
(include "./windows/music.yuck")
(include "./windows/osd.yuck")
(include "./windows/system-menu.yuck")
(defwidget left []
(box
:space-evenly false
:halign "start"
:class "vis"
(workspaces)))
(defwidget right []
(box
:space-evenly false
:halign "end"
:class "vis bar"
(music-module)
(volume-module)
(net)
(sys)
(clock_module)))
(defwidget center []
(box
:space-evenly false
:halign "center"
:class "vis bar"
(current-win-module)))
(defwidget bar-box []
(centerbox
:class "vis bar"
(left)
(center)
(right)))
(defwindow bar
:monitor 0
:geometry (geometry :x "0%"
:y "0%"
:width "100%"
:height "14px"
:anchor "top center")
:stacking "fg"
:exclusive true
(bar-box))

View file

@ -1,8 +0,0 @@
(defwidget bluetooth []
(button
:class "module-bt module icon"
:onclick "blueberry"
:onrightclick "scripts/bluetooth toggle"
:tooltip "${bluetooth.text} ${bluetooth.battery}"
:style "color: ${bluetooth.color};"
{bluetooth.icon}))

View file

@ -1,9 +0,0 @@
(defwidget bright []
(box
:class "module"
(eventbox
:onscroll "echo {} | sed -e 's/up/-U 1/g' -e 's/down/-A 1/g' | xargs light"
(label
:text {brightness.icon}
:class "bright-icon icon"
:tooltip "brightness ${round(brightness.percent, 0)}%"))))

View file

@ -1,24 +0,0 @@
(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})))))

View file

@ -1,8 +0,0 @@
(defwidget current-win-module []
(box
(button
:class "module"
"${current_win.title}""
)
)
)

View file

@ -1,28 +0,0 @@
(defwidget music-module []
(eventbox
:onhover "${EWW_CMD} update music_reveal=true"
:onhoverlost "${EWW_CMD} update music_reveal=false"
(box
:class "module"
:space-evenly false
(box
:class "song-cover-art"
:style "background-image: url(\"${music.cover}\");")
(button
:class "module"
:onclick "${EWW_CMD} open --toggle music"
{music.status == "Stopped" || music.status == "" ? "" :
"${music.artist} - ${music.title}"})
(box
:class "icon"
{music.static == "Stopped" || music.status == "" ? "" : music.status == "Playing" ? "" : "" })
(revealer
:class "playctl"
:transition "slideright"
:reveal music_reveal
:duration "350ms"
(box
:class "icon"
(button :class "song-button" :onclick "playerctl previous" "")
(button :class "song-button" :onclick "playerctl play-pause" {music.status == "Playing" ? "" : ""})
(button :class "song-button" :onclick "playerctl next" ""))))))

View file

@ -1,7 +0,0 @@
(defwidget net []
(button
:class "module icon"
:onclick "gnome-control-center &"
:tooltip {net.essid}
:style "color: ${net.color};"
{net.icon}))

View file

@ -1,32 +0,0 @@
(defwidget sys []
(box
:class "module"
:space-evenly false
:spacing 5
(circular-progress
:value "${EWW_CPU.avg}"
:class "cpubar"
:thickness 3
(button
:tooltip "using ${round(EWW_CPU.avg,0)}% cpu"
:onclick "${EWW_CMD} open --toggle system-menu"
(label :class "icon-text" :text "")))
(circular-progress
:value {memory.percent}
:class "membar"
:thickness 3
(button
:tooltip "using ${round(memory.percent,0)}% ram"
:onclick "${EWW_CMD} open --toggle system-menu"
(label :class "icon-text" :text "")))
(circular-progress
:value "${EWW_BATTERY["BAT0"].capacity}"
:class "batbar"
:style "color: ${battery.color};"
:thickness 3
(button
:tooltip "battery on ${EWW_BATTERY["BAT0"].capacity}%"
:onclick "${EWW_CMD} open --toggle system-menu"
(label :class "icon-text" :text "")))))

View file

@ -1,21 +0,0 @@
(defvar bright_reveal false)
(defvar bt_rev false)
(defvar music_reveal false)
(defvar net_rev false)
(defvar time_rev false)
(defvar vol_reveal false)
(defvar osd-brightness false)
(defvar osd-volume false)
(defpoll time :interval "5s" `date +'{"date": "%d/%m", "hour": "%H", "minute": "%M", "day": "%A"}'`)
(deflisten airplane "scripts/airplane")
(deflisten battery "scripts/battery")
(deflisten bluetooth "scripts/bluetooth")
(deflisten brightness "scripts/brightness")
(deflisten memory "scripts/memory")
(deflisten music "scripts/music")
(deflisten net "scripts/net")
(deflisten volume "scripts/volume")
(deflisten workspace "scripts/workspaces")
(deflisten current_win "scripts/current_win")

View file

@ -1,11 +0,0 @@
(defwidget volume-module []
(box
:class "module icon"
(eventbox
:onscroll "echo {} | sed -e 's/up/-/g' -e 's/down/+/g' | xargs -I% wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.005%"
:onclick "pavucontrol &"
:onrightclick "scripts/volume mute SINK"
(label
:class "vol-icon"
:tooltip "volume ${volume.percent}%"
:text {volume.icon}))))

View file

@ -1,13 +0,0 @@
(defwidget workspaces []
(eventbox
:onscroll "echo {} | sed -e \"s/up/-1/g\" -e \"s/down/+1/g\" | xargs hyprctl dispatch workspace"
(box
:class "module workspaces"
:spacing 5
(for ws in workspace
(button
:onclick "hyprctl dispatch workspace ${ws.number}"
:class "ws icon"
:style "color: ${ws.color};"
; :tooltip {ws.tooltip}
"●")))))

View file

@ -1,29 +0,0 @@
#!/bin/sh
icon() {
if [ "$STATUS" = "no" ]; then
echo ""
else
echo ""
fi
}
toggle() {
if [ "$STATUS" = "no" ]; then
rfkill block all
notify-send --urgency=normal -i airplane-mode-symbolic "Airplane Mode" "Airplane mode has been turned on!"
else
rfkill unblock all
notify-send --urgency=normal -i airplane-mode-disabled-symbolic "Airplane Mode" "Airplane mode has been turned off!"
fi
}
if [ "$1" = "toggle" ]; then
toggle
else
while true; do
STATUS="$(rfkill list | sed -n 2p | awk '{print $3}')"
icon
sleep 3;
done
fi

View file

@ -1,65 +0,0 @@
#!/usr/bin/env bash
icons=("" "" "" "" "" "" "" "")
num_icons=$(bc <<< "100 / ${#icons[@]}")
geticon() {
level=$(awk -v n="$CAPACITY" -v c="$num_icons" 'BEGIN{print int(n/c-1)}')
if [[ "$level" -lt 0 ]]; then
level=0
fi
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() {
if [ "$CAPACITY" -le 20 ]; then
echo '#f38ba8'
else
echo '#a6e3a1'
fi
}
wattage() {
microwatts=1000000
echo "$(bc -l <<< "scale=1; $RATE / $microwatts") W"
}
gettime() {
FULL=$(cat /sys/class/power_supply/BAT0/energy_full)
NOW=$(cat /sys/class/power_supply/BAT0/energy_now)
if [ "$RATE" -gt 0 ]; then
if [ "$STATE" = "Discharging" ]; then
EX="$NOW / $RATE"
else
EX="($FULL - $NOW) / $RATE"
fi
date -u -d@"$(bc -l <<< "$EX * 3600")" +%H:%M
fi
}
while true; do
RATE=$(cat /sys/class/power_supply/BAT0/power_now)
CAPACITY=$(cat /sys/class/power_supply/BAT0/capacity)
STATE=$(cat /sys/class/power_supply/BAT0/status)
echo '{ "icon": "'"$(geticon)"'", "percent": '"$CAPACITY"', "wattage": "'"$(wattage)"'", "status": "'"$(status)"'", "color": "'"$(color)"'" }'
sleep 3
done

View file

@ -1,51 +0,0 @@
#!/usr/bin/env bash
toggle() {
status=$(rfkill -J | jaq -r '.rfkilldevices[] | select(.type == "bluetooth") | .soft' | head -1)
if [ "$status" = "unblocked" ]; then
rfkill block bluetooth
else
rfkill unblock bluetooth
fi
}
if [ "$1" = "toggle" ]; then
toggle
else
while true; do
powered=$(bluetoothctl show | rg Powered | cut -f 2- -d ' ')
status=$(bluetoothctl info)
name=$(echo "$status" | rg Name | cut -f 2- -d ' ')
mac=$(echo "$status" | head -1 | awk '{print $2}' | tr ':' '_')
if [[ "$(echo "$status" | rg Percentage)" != "" ]]; then
battery="$(upower -i /org/freedesktop/UPower/devices/headset_dev_"$mac" | rg percentage | awk '{print $2}' | cut -f 1 -d '%')%"
else
battery=""
fi
if [ "$powered" = "yes" ]; then
if [ "$status" != "Missing device address argument" ]; then
text="$name"
icon=""
color="#89b4fa"
class="bt-connected"
else
icon=""
text="Disconnected"
color="#45475a"
class=""
fi
else
icon=""
text="Bluetooth off"
color="#45475a"
class=""
fi
echo '{ "icon": "'"$icon"'", "battery": "'"$battery"'", "text": "'"$text"'", "color": "'"$color"'", "class": "'"$class"'" }'
sleep 3
done
fi

View file

@ -1,61 +0,0 @@
#!/usr/bin/env bash
icons=("" "" "")
if [ ! "$XDG_CACHE_HOME" ]; then
XDG_CACHE_HOME="/home/mihai/.local/cache"
fi
date="$XDG_CACHE_HOME/eww/osd_brightness.date"
osd() {
if [ ! -f "$date" ]; then
mkdir -p "$XDG_CACHE_HOME/eww"
fi
date +%s > "$date"
}
osd_handler() {
lock=0
rundate=0
if [ ! -f "$date" ]; then
mkdir -p "$XDG_CACHE_HOME/eww"
echo 0 > "$date"
fi
while true; do
# get dates
rundate=$(cat "$date")
currentdate=$(date +%s)
# handle showing
if [ "$rundate" = "$currentdate" ] && [ "$lock" -eq 0 ]; then
eww open osd
eww update osd-brightness=true
lock=1
elif [ "$((currentdate - rundate))" = "2" ] && [ "$lock" -eq 1 ]; then
eww update osd-brightness=false
lock=0
if [ "$(eww get osd-brightness)" = "false" ] && [ "$(eww get osd-volume)" = "false" ]; then
eww close osd
fi
fi
sleep 0.1
done
eww close osd
}
if [ "$1" = "osd" ]; then
osd
else
osd_handler &
# initial
icon=${icons[$(awk -v n="$(light)" 'BEGIN{print int(n/34)}')]}
echo '{ "percent": '"$(light)"', "icon": "'"$icon"'" }'
udevadm monitor | rg --line-buffered "backlight" | while read -r _; do
icon="${icons[$(awk -v n="$(light)" 'BEGIN{print int(n/34)}')]}"
echo '{ "percent": '"$(light)"', "icon": "'"$icon"'" }'
done
fi

View file

@ -1,7 +0,0 @@
#!/usr/bin/env bash
limit=128
swaymsg -m -t subscribe '[ "window" ]' | while read line; do
title=$(printf $line | gojq -r ."container.name" | cut -c -$limit)
echo '{ "title": "'$title'" }'
done

View file

@ -1,20 +0,0 @@
#!/usr/bin/env bash
while true; do
# human-readable
freeH=$(free -h --si | rg "Mem:")
# non-human-readable
freeN=$(free --mega | rg "Mem:")
total="$(echo "$freeH" | awk '{ print $2 }')"
used="$(echo "$freeH" | awk '{ print $3 }')"
t="$(echo "$freeN" | awk '{ print $2 }')"
u="$(echo "$freeN" | awk '{ print $3 }')"
free=$(printf '%.1fG' "$(bc -l <<< "($t - $u) / 1000")")
perc=$(printf '%.1f' "$(free -m | rg Mem | awk '{print ($3/$2)*100}')")
echo '{ "total": "'"$total"'", "used": "'"$used"'", "free": "'"$free"'", "percent": '"$perc"' }'
sleep 3
done

View file

@ -1,112 +0,0 @@
#!/usr/bin/env bash
get_status() {
s=$1
if [ "$s" = "Playing" ]; then
echo ""
else
echo ""
fi
}
get_length_sec() {
len=$1
if [ -z "$len" ]; then
echo 0
else
bc <<<"$len / 1000000"
fi
}
get_length_time() {
len=$1
if [ -n "$len" ]; then
len=$(bc <<<"$len / 1000000 + 1")
date -d@"$len" +%M:%S
else
echo ""
fi
}
get_position() {
pos=$1
len=$2
if [ -n "$pos" ]; then
bc -l <<<"$pos / $len * 100"
else
echo 0
fi
}
get_position_time() {
pos=$1
len=$2
if [ -n "$pos" ]; then
date -d@"$(bc <<<"$pos / 1000000")" +%M:%S
else
echo ""
fi
}
get_cover() {
mkdir -p "$XDG_CACHE_HOME/eww_covers"
cd "$XDG_CACHE_HOME/eww_covers" || exit
IMGPATH="$XDG_CACHE_HOME/eww_covers/cover_art.png"
COVER_URL="$1"
if [[ "$COVER_URL" = https* ]]; then
if [ ! -e "$XDG_CACHE_HOME/eww_covers/$(basename "$COVER_URL")" ]; then
wget -N "$COVER_URL" -o /dev/null
fi
rm "$IMGPATH"
ln -s "$(basename "$COVER_URL")" "$IMGPATH"
IMG="${IMGPATH}"
elif [ "$COVER_URL" = "" ]; then
IMG=""
else
IMG="$COVER_URL"
fi
echo "$IMG"
}
sanitize() {
echo "$1" | sed 's/"/\"/g'
}
prevCover=''
playerctl -F metadata -f '{{title}}\{{artist}}\{{status}}\{{position}}\{{mpris:length}}\{{mpris:artUrl}}' 2>/dev/null | while IFS="$(printf '\')" read -r title artist status position len cover; do
if [[ "$cover" != "$prevCover" ]]; then
COVER=$(get_cover "$cover")
if [ "$COVER" != "" ]; then
cols=$(convert "$COVER" -colors 2 -format "%c" histogram:info: | awk '{print $3}')
color1=$(echo "$cols" | head -1)
color1=$(printf "rgba(%d, %d, %d, 0.6)" ${color1:1:2} ${color1:3:2} ${color1:5:2})
color2=$(echo "$cols" | tail -1)
else
color1="#1e1e2e"
color2="#28283d"
fi
fi
jaq --null-input -r -c \
--arg artist "$(sanitize "${artist:0:32}")" \
--arg title "$(sanitize "${title:0:32}")" \
--arg status "$status" \
--arg pos "$(get_position "$position" "$len")" \
--arg pos_time "$(get_position_time "$position" "$len")" \
--arg length "$(get_length_time "$len")" \
--arg cover "$COVER" \
--arg color1 "$color1" \
--arg color2 "$color2" \
'{"artist": $artist, "title": $title, "status": $status, "position": $pos, "position_time": $pos_time, "length": $length, "cover": $cover, "color1": $color1, "color2": $color2}'
prevCover=$cover
done

View file

@ -1,43 +0,0 @@
#!/usr/bin/env bash
toggle() {
status=$(rfkill -J | jaq -r '.rfkilldevices[] | select(.type == "wlan") | .soft' | head -1)
if [ "$status" = "unblocked" ]; then
rfkill block wlan
else
rfkill unblock wlan
fi
}
if [ "$1" = "toggle" ]; then
toggle
else
while true; do
status=$(nmcli -f state g| tail -1)
wifistatus=$(nmcli -t -f in-use,ssid,signal dev wifi | rg '\*' | sed 's/\"/\\"/g')
signal=$(echo "$wifistatus" | awk -F: '{print $3}')
essid=$(echo "$wifistatus" | awk -F: '{print $2}')
icons=("" "" "" "" "")
if [ "$status" = "disconnected" ] ; then
icon=""
color="#988ba2"
class=""
else
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="wifi-connected"
fi
echo '{ "essid": "'"$essid"'", "icon": "'"$icon"'", "color": "'"$color"'", "class": "'"$class"'" }'
sleep 3
done
fi

View file

@ -1,102 +0,0 @@
#!/usr/bin/env bash
volicons=("" "" "")
if [ ! "$XDG_CACHE_HOME" ]; then
XDG_CACHE_HOME="/home/mihai/.local/cache"
fi
date="$XDG_CACHE_HOME/eww/osd_vol.date"
vol() {
wpctl get-volume @DEFAULT_AUDIO_"$1"@ | awk '{print int($2*100)}'
}
ismuted() {
wpctl get-volume @DEFAULT_AUDIO_"$1"@ | rg -i muted
echo $?
}
setvol() {
wpctl set-volume @DEFAULT_AUDIO_"$1"@ "$(awk -v n="$2" 'BEGIN{print (n / 100)}')"
}
setmute() {
wpctl set-mute @DEFAULT_AUDIO_"$1"@ toggle
}
osd() {
if [ ! -f "$date" ]; then
mkdir -p "$XDG_CACHE_HOME/eww"
fi
date +%s > "$date"
}
osd_handler() {
lock=0
rundate=0
if [ ! -f "$date" ]; then
mkdir -p "$XDG_CACHE_HOME/eww"
echo 0 > "$date"
fi
while true; do
# get dates
rundate=$(cat "$date")
currentdate=$(date +%s)
# handle showing
if [ "$rundate" = "$currentdate" ] && [ "$lock" -eq 0 ]; then
eww open osd
eww update osd-volume=true
lock=1
elif [ "$((currentdate - rundate))" = "2" ] && [ "$lock" -eq 1 ]; then
eww update osd-volume=false
lock=0
if [ "$(eww get osd-volume)" = "false" ] && [ "$(eww get osd-brightness)" = "false" ]; then
eww close osd
fi
fi
sleep 0.1
done
eww close osd
}
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 1 ] || [ "$3" -gt 100 ]; then
echo "Volume must be between 1 and 100"; exit 1
fi
setvol "$2" "$3"
elif [ "$1" = "osd" ]; then
osd
else
# initial values
lvl=$(awk -v n="$(vol "SINK")" '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")"'" }'
osd_handler &
# event loop
pactl subscribe | rg --line-buffered "change" | while read -r _; do
lvl=$(awk -v n="$(vol "SINK")" '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")"'" }'
done
fi

View file

@ -1,60 +0,0 @@
#!/usr/bin/env bash
# define colors
# red peach green blue
colors=("#f38ba8" "#fab387" "#a6e3a1" "#89b4fa")
# pink yellow teal lavender
dimmed=("#f5c2e7" "#f9e2af" "#94e2d5" "#b4befe")
empty="#313244"
# get initial focused workspace
# whatever
# focusedws=$(swaymsg -t get_workspaces -r | )
declare -A o=([1]=0 [2]=0 [3]=0 [4]=0)
# set color for each workspace
status() {
if [ "${o[$1]}" -eq 1 ]; then
if [ "$focusedws" -eq "$1" ]; then
echo -n "#ffd292"
# echo -n "${colors[$mon]}"
else
# echo -n "${dimmed[$mon]}"
echo -n "#da827a"
fi
else
# echo -n "$empty"
echo -n "#202e2f"
fi
}
# generate the json for eww
generate() {
echo -n '['
for i in {1..4}; do
echo -n ''"$([ "$i" -eq 1 ] || echo ,)" '{ "number": "'"$i"'", "color": "'"$(status "$i")"'" }'
done
echo ']'
}
# generate initial widget
generate
# main loop
swaymsg -m -t subscribe '[ "workspace" ]' | jq -r '.change+" "+.current.name' | while read -r line; do
case ${line%' '*} in
"focus")
focusedws=${line#*' '}
;;
"init")
workspace_event "${line#*' '}" 1
;;
"empty")
workspace_event "${line#*' '}" 0
;;
esac
generate
done

View file

@ -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))

View file

@ -1,55 +0,0 @@
(defwidget music []
(box
:class "music-window"
:space-evenly false
:style "background-color: ${music.color1}; border: 1px solid ${music.color2};"
(box
:class "music-cover-art"
:style "background-image: url(\"${music.cover}\");")
(box
:orientation "v"
:class "music-box"
(label
:class "music-title"
:wrap true
:text {music.title})
(label
:class "music-artist"
:wrap true
:text {music.artist})
(centerbox
:halign "center"
:class "music-button-box icon"
(button :class "music-button" :onclick "playerctl previous" "")
(button :class "music-button" :onclick "playerctl play-pause" {music.status})
(button :class "music-button" :onclick "playerctl next" ""))
(box
:orientation "v"
(box
(label
:xalign 0
:class "music-time"
:text {music.position_time})
(label
:xalign 1
:class "music-time"
:text {music.length}))
(box
:class "music-bar"
(scale
; doesn't work, looking for other ways
; :style "background: linear-gradient(to right, ${music.color1}, ${music.color2});"
:onchange "playerctl position `bc <<< \"{} * $(playerctl metadata mpris:length) / 1000000 / 100\"`"
:value {music.position}))))))
(defwindow music
:stacking "fg"
:focusable false
:monitor 0
:geometry (geometry
:x "0%"
:y "0%"
:width "0%"
:height "0%"
:anchor "top center")
(music))

View file

@ -1,43 +0,0 @@
(defwidget osd-part [icon value class]
(box
:class "osd-part osd-${class}"
:orientation "v"
:space-evenly false
(scale
:flipped true
:orientation "v"
:value value)
(label
:text icon)))
(defwidget osd []
(box
:class "osd-container"
:space-evenly false
(revealer
:reveal {osd-brightness}
:transition "slideright"
(osd-part
:class "brightness"
:icon {brightness.icon}
:value {brightness.percent}))
(revealer
:reveal {osd-volume}
:transition "slideright"
(osd-part
:class "volume"
:icon {volume.icon}
:value {volume.percent})))
)
(defwindow osd
:stacking "fg"
:focusable false
:monitor 0
:geometry (geometry
:x "1%"
:y "0%"
:width "0%"
:height "0%"
:anchor "center left")
(osd))

View file

@ -1,204 +0,0 @@
(defwidget system-menu []
(box
:class "system-menu-box"
:space-evenly false
:orientation "v"
(box
:class "top-row"
:space-evenly false
(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})))
(centerbox
:class "system-row"
(box
:class "wifi-box"
:space-evenly false
:orientation "v"
(box
:class "element icon ${net.class}"
:space-evenly false
(button
:class "wifi-button"
:onclick "scripts/net toggle"
{net.icon})
(label
:class "separator"
:text "│")
(button
:class "wifi-arrow-btn"
:onclick "eww close system-menu && gnome-control-center &"
""))
(label
:text {net.essid}
:xalign 0.5
:limit-width 15))
(box
:class "bluetooth-box"
:space-evenly false
:orientation "v"
(box
:class "element icon ${bluetooth.class}"
:space-evenly false
(button
:class "bluetooth-button"
:onclick "scripts/bluetooth toggle"
{bluetooth.icon})
(label
:class "separator"
:text "│")
(button
:class "bluetooth-arrow-btn"
:onclick "eww close system-menu && blueberry"
""))
(label
:text {bluetooth.text}
:xalign 0.5
:tooltip "${bluetooth.text} ${bluetooth.battery}"
:limit-width 15))
(box
:class "airplane-box"
:space-evenly false
:orientation "v"
(box
:class "element"
(button
:class "airplane-button"
:onclick "scripts/airplane toggle"
airplane))
(label
:text "Airplane 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}
:tooltip "volume on ${volume.percent}%"
:onchange "scripts/volume setvol SINK {}"))
(box
:class "brightness-slider-box"
:space-evenly false
(button
:class "brightness-slider-icon icon"
{brightness.icon})
(scale
:class "brightness-slider"
:value {brightness.percent}
:marks true
:onchange "light -S {}")))
(box
:class "system-info-box"
; cpu
(box
:class "sys-box"
:space-evenly false
:halign "start"
(circular-progress
:value "${EWW_CPU.avg}"
:class "sys-cpu"
:thickness 3
(label
:text ""
:class "sys-icon-cpu icon"))
(box
:orientation "v"
:vexpand false
(label
:text "cpu"
:halign "start"
:class "sys-text-cpu")
(label
:text "${round(EWW_CPU.avg,2)}%"
:halign "start"
:class "sys-text-sub")
(label
:text "${EWW_CPU.cores[0].freq} MHz"
:halign "start"
:class "sys-text-sub")))
; memory
(box
:class "sys-box"
:space-evenly false
:halign "end"
(circular-progress
:value {memory.percent}
:class "sys-mem"
:thickness 3
(label
:text ""
:class "sys-icon-mem icon"))
(box
:orientation "v"
(label
:text "memory"
:halign "start"
:class "sys-text-mem")
(label
:text "${memory.used} | ${memory.total}"
:halign "start"
:class "sys-text-sub"))))
(centerbox
:class "bottom-row"
(box
:class "battery-box"
:space-evenly false
:halign "start"
(label
:class "battery-icon icon"
:style "color: ${battery.color}"
:text {battery.icon})
(label
:text {EWW_BATTERY["BAT0"].capacity})
(label
:class "battery-status"
:text {battery.status})
(label
:class "battery-wattage"
:text {battery.wattage}))
(label)
(box
:space-evenly false
:halign "end"
(button
:halign "end"
:class "power-button icon"
:onclick "wlogout -p layer-shell &"
"")))))
(defwindow system-menu
:stacking "fg"
:monitor 0
:geometry (geometry
:x "0"
:y "0"
:width "0%"
:height "0%"
:anchor "right top")
(system-menu))

View file

@ -49,7 +49,6 @@ in {
"keepassxc-browser@keepassxc.org" = officialAddon "keepassxc-browser";
"vimium-c@gdh1995.cn" = officialAddon "vimium-c";
"{b86e4813-687a-43e6-ab65-0bde4ab75758}" = officialAddon "localcdn-fork-of-decentraleyes";
"plasma-browser-integration@kde.org" = officialAddon "plasma-integration";
};
Preferences = {

View file

@ -1,38 +0,0 @@
{
config,
lib,
pkgs,
...
}: let
palette-hex = pkgs.lib.nix-rice.palette.toRgbHex pkgs.rice.palette;
palette-shex = pkgs.lib.nix-rice.palette.toRGBShortHex pkgs.rice.palette;
in {
config.home.packages = [pkgs.fuzzel];
config.programs.fuzzel = with pkgs.rice; {
enable = true;
settings = {
main = {
dpi-aware = "no";
font = with fonts.sans; lib.strings.concatStrings [name ":size=" (builtins.toString (size + 2))];
icon-theme = icons.name;
terminal = "kitty";
};
dmenu = {
exit-immediately-if-empty = "yes";
};
border = with borders; {
width = thickness;
radius = rounding;
};
colors = {
background = lib.strings.concatStrings [palette-hex.util.bg "A0"];
text = lib.strings.concatStrings [palette-hex.util.fg "FF"];
selection = lib.strings.concatStrings [palette-hex.bright.yellow "FF"];
selection-text = lib.strings.concatStrings [palette-hex.util.bg "FF"];
selection-match = lib.strings.concatStrings [palette-hex.normal.green "FF"];
match = lib.strings.concatStrings [palette-hex.bright.green "FF"];
border = lib.strings.concatStrings [palette-hex.bright.yellow "FF"];
};
};
};
}

View file

@ -1,77 +0,0 @@
{
config,
lib,
pkgs,
inputs,
...
}: {
config.imports =
config.imports
++ [
inputs.ironbar.homeManagerModules.default
];
config.programs.ironbar = with pkgs.rice; {
# enable = true;
config = {
anchor_to_edges = true;
position = "top";
height = 8;
icon_theme = icons.name;
start = [
{
type = "workspaces";
all_monitors = true;
}
{
type = "sys_info";
interval.memory = 30;
interval.cpu = 1;
format = [
" {cpu_percent}%"
" {memory_used} / {memory_total} GB"
];
}
];
center = [
{
type = "focused";
icon_size = 8;
}
];
end = [
{
type = "music";
player_type = "mpris";
on_click_middle = "playerctl play-pause";
on_scroll_up = "playerctl volume +5";
on_scroll_down = "playerctl volume -5";
}
{type = "clock";}
];
};
style = with palette-hex; (builtins.replaceStrings
[
"#BG"
"#DARKBG"
"#BORDER"
"#ACTIVEBORDER"
"#TEXT"
"#URGENT"
"#FONT"
"#SZFONT"
]
[
util.bg
normal.black
normal.black
normal.black
util.fg
normal.red
fonts.sans.name
"10" # (builtins.toString fonts.sans.size)
]
(builtins.readFile dots/ironbar.css));
};
}

View file

@ -1,78 +0,0 @@
{
config,
lib,
pkgs,
...
}: {
config.programs.firefox.webapps = {
"OpenWebUI" = {
url = "http://127.0.0.1:3021";
id = 6;
extraSettings = config.programs.firefox.profiles.default.settings;
name = "OpenWebUI Client";
hidden = true;
};
};
config.systemd.user.services = {
open-webui = {
Unit.Description = "OpenWebUI";
Service = let
docker = lib.getExe pkgs.docker;
in {
Type = "exec";
ExecStartPre = "-${docker} create -e PORT=3021 --network host --gpus all -v ollama:/root/.ollama -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:ollama";
ExecStart = "${docker} start open-webui";
ExecStop = "${docker} stop open-webui";
};
};
};
config.xdg.desktopEntries = {
open-webui = {
name = "Ollama OpenWebUI";
type = "Application";
icon = ../icons/openwebui.png;
exec = "${let
notify-send = "${lib.getExe' pkgs.libnotify "notify-send"} -a \"Ollama OpenWebUI\"";
systemctl = "${lib.getExe' pkgs.systemd "systemctl"}";
dex = "${lib.getExe pkgs.dex}";
curl = "${lib.getExe pkgs.curl}";
in
pkgs.writeShellScript "ollama"
''
${notify-send} "Launching backend.." "Please be patient."
${systemctl} --user start open-webui
attempts=0
success=false
while [[ $attempts -lt $((20*9)) ]]; do
if [[ $(${curl} http://127.0.0.1:3021) ]]; then
${notify-send} "Backend up." "Launching client.."
success=true
break
else
attempts=$((attempts+1))
if [[ $(($attempts % 20)) -eq 0 ]]; then
${notify-send} "Launching backend.." "Still launching.. ($((attempts/2))s)"
fi
fi
sleep 0.5
done
if [[ ! $success ]]; then
${notify-send} "Failure" "Failed to launch backend!"
${systemctl} --user kill open-webui
exit 1
fi
sleep 0.5 # give it a little time
${dex} -w ~/.nix-profile/share/applications/OpenWebUI.desktop
${notify-send} "Goodbye" "Shutting down."
${systemctl} --user stop open-webui
exit 0
''}";
};
};
}

File diff suppressed because it is too large Load diff

View file

@ -1,54 +0,0 @@
{
config,
lib,
pkgs,
...
}: let
palette-hex = pkgs.lib.nix-rice.palette.toRgbHex pkgs.rice.palette;
palette-shex = pkgs.lib.nix-rice.palette.toRGBShortHex pkgs.rice.palette;
in {
config.ezConf = {
"qtile/autostart.sh" = ../dots/qtile/autostart.sh;
"qtile/lib.py" = ../dots/qtile/lib.py;
};
config.extraTarget = ["qtile-session.target"];
config.xdg.configFile."qtile/config.py" = {
enable = true;
executable = true;
onChange = "${lib.getExe' pkgs.procps "pkill"} -SIGUSR1 qtile";
text = with palette-shex;
with pkgs.rice; (builtins.replaceStrings
[
"#GAPS"
"#SINGLE_GAP"
"#BORDERWIDTH"
"#BORDERFOCUS"
"#BORDERCOL"
"#FONTFACE"
"#FONTSIZE"
"#BGCOL"
"#FGCOL"
]
[
(builtins.toString borders.gaps_in)
(builtins.toString borders.gaps_out)
(builtins.toString borders.thickness)
bright.yellow
normal.black
fonts.sans.name
(builtins.toString fonts.sans.size)
util.bg
util.fg
]
(builtins.readFile ../dots/qtile/config.py));
};
config.systemd.user.targets.qtile-session = {
Unit = {
BindsTo = ["graphical-session.target"];
Wants = ["graphical-session-pre.target" "xdg-desktop-autostart.target"];
After = ["graphical-session-pre.target"];
Before = ["xdg-desktop-autostart.target"];
};
};
}

View file

@ -1,86 +0,0 @@
{
config,
pkgs,
lib,
...
}: {
# TODO: figure out if there's a meaningful way to add this to the nix store
# if nothing's reproducible should we even bother
# https://github.com/AbdBarho/stable-diffusion-webui-docker/
config.programs.firefox.webapps = {
"StableDiffusion" = {
url = "http://127.0.0.1:7860";
id = 5;
extraSettings = config.programs.firefox.profiles.default.settings;
name = "Stable Diffusion Client";
hidden = true;
};
};
config.systemd.user.services = {
stable-diffusion = {
Unit.Description = "Stable Diffusion Backend";
Service = {
WorkingDirectory = "${config.home.homeDirectory}/code/etc/stable-diffusion-webui-docker";
ExecStart = "${lib.getExe pkgs.docker} compose --profile comfy up --build";
};
};
};
config.xdg.desktopEntries = {
stable-diffusion = {
name = "Stable Diffusion";
type = "Application";
icon = ../icons/comfyui.png;
exec = "${let
notify-send = "${lib.getExe' pkgs.libnotify "notify-send"} -a Stable Diffusion";
systemctl = "${lib.getExe' pkgs.systemd "systemctl"}";
dex = "${lib.getExe pkgs.dex}";
curl = "${lib.getExe pkgs.curl}";
in
pkgs.writeShellScript "stable-diffusion"
''
${notify-send} "Launching backend.." "Please be patient."
${systemctl} --user start stable-diffusion
attempts=0
success=false
while [[ $attempts -lt $((20*9)) ]]; do
if [[ $(${curl} http://127.0.0.1:7860) ]]; then
${notify-send} "Backend up." "Launching client.."
success=true
break
else
attempts=$((attempts+1))
if [[ $(($attempts % 20)) -eq 0 ]]; then
${notify-send} "Launching backend.." "Still launching.. ($((attempts/2))s)"
fi
fi
sleep 0.5
done
if [[ ! $success ]]; then
${notify-send} "Failure" "Failed to launch backend!"
${systemctl} --user kill stable-diffusion
exit 1
fi
sleep 0.5 # give it a little time
${dex} -w ~/.nix-profile/share/applications/StableDiffusion.desktop
${notify-send} "Goodbye" "Shutting down."
${systemctl} --user stop stable-diffusion
exit 0
''}";
};
# stable-diffusion-dl = {
# name = "Stable Diffusion Setup";
# type = "Application";
# settings = {
# Path = "${config.home.homeDirectory}/code/etc/stable-diffusion-webui-docker";
# };
# exec = "docker compose --profile download up --build";
# };
};
}

View file

@ -1,157 +0,0 @@
{
config,
lib,
pkgs,
...
}: {
config.wayland.windowManager.sway = {
enable = true;
package = pkgs.sway;
config = with pkgs.rice; {
bars = [];
# reintroduces flicker
# output = {
# "*" = {
# adaptive_sync = "on";
# };
# };
focus = {
mouseWarping = "container";
wrapping = "no";
};
fonts = with fonts; {
names = [sans.name emoji.name];
size = 10.0;
};
gaps = {
inner = borders.gaps_in;
outer = borders.gaps_out;
smartGaps = true;
smartBorders = "no_gaps";
};
window = {
border = borders.thickness;
hideEdgeBorders = "smart";
titlebar = false;
commands = [
{
command = "move scratchpad";
criteria = {
app_id = "org.keepassxc.KeePassXC";
};
}
];
};
workspaceAutoBackAndForth = false;
input = {
"*" = {
accel_profile = "flat";
pointer_accel = "0.0";
xkb_options = "caps:escape";
};
};
startup = with pkgs; [
{command = "${lib.getExe' keepassxc "keepassxc"}";}
{command = "${lib.getExe' ckb-next "ckb-next"} -c -b";}
{command = "${lib.getExe' mullvad "mullvad"} connect";}
{command = "${lib.getExe' xorg.xrdb "xrdb"} -l ~/.Xresources";}
{command = "${lib.getExe' flashfocus "flashfocus"} -o 0.95 -t 175 -n 30 --no-flash-fullscreen -l on_open_close";}
{command = "${lib.getExe' glib.bin "gsettings"} set org.gnome.desktop.interface gtk-theme '${rice.gtk-theme.name}'";}
{command = "${lib.getExe' glib.bin "gsettings"} set org.gnome.desktop.interface font-name '${rice.fonts.sans.name}'";}
{command = "${lib.getExe' glib.bin "gsettings"} set org.gnome.desktop.interface icon-theme '${rice.icons.name}'";}
];
terminal = "kitty";
modifier = "Mod4";
keybindings = {
"Mod4+Return" = "exec kitty";
"Mod4+d" = "exec fuzzel";
"Mod4+e" = "exec thunar";
"Mod4+f" = "exec firefox";
"Mod4+Shift+e" = "exec wlogout";
"Mod4+Shift+s" = "exec grim -g \"$(slurp)\" -t png -o \"${config.home.homeDirectory}/Pictures/$(date +%F_%H-%m-%S).png\" && notify-send \"Screenshot taken.\"";
"Mod4+Shift+Ctrl+s" = "exec kooha";
"Mod4+n" = "exec swaync-client -t";
"Mod4+Space" = "floating toggle; move absolute position center";
"Mod4+c" = "focus floating; move absolute position center";
"Mod4+Shift+Space" = "fullscreen toggle";
"Mod4+a" = "focus parent";
"Mod4+Shift+a" = "focus child";
"Mod4+h" = "focus left";
"Mod4+j" = "focus down";
"Mod4+k" = "focus up";
"Mod4+l" = "focus right";
"Mod4+Shift+h" = "move left";
"Mod4+Shift+j" = "move down";
"Mod4+Shift+k" = "move up";
"Mod4+Shift+l" = "move right";
"Mod4+1" = "workspace 1";
"Mod4+Shift+1" = "move container to workspace 1";
"Mod4+2" = "workspace 2";
"Mod4+Shift+2" = "move container to workspace 2";
"Mod4+3" = "workspace 3";
"Mod4+Shift+3" = "move container to workspace 3";
"Mod4+4" = "workspace 4";
"Mod4+Shift+4" = "move container to workspace 4";
"Mod4+r" = "mode resize";
"Mod4+Shift+minus" = "move scratchpad";
"Mod4+minus" = "scratchpad show";
"Mod4+Shift+q" = "kill";
"Mod4+v" = "split toggle";
"XF86AudioMute" = "exec swayosd --output-volume mute-toggle";
"XF86AudioRaiseVolume" = "exec swayosd --output-volume raise";
"XF86AudioLowerVolume" = "exec swayosd --output-volume lower";
"XF86AudioStop" = "exec playerctl stop";
"XF86AudioPlay" = "exec playerctl play-pause";
"XF86AudioPrev" = "exec playerctl previous";
"XF86AudioNext" = "exec playerctl next";
"XF86MonBrightnessUp" = "exec swayosd --brightness raise";
"XF86MonBrightnessDown" = "exec swayosd --brightness lower";
};
menu = "fuzzel";
colors = with palette-hex; {
background = util.bg;
focused = {
background = util.bg;
border = bright.yellow;
childBorder = bright.yellow;
indicator = bright.yellow;
text = util.fg;
};
focusedInactive = {
background = normal.black;
border = util.bg;
childBorder = util.bg;
indicator = util.bg;
text = normal.white;
};
placeholder = {
background = util.bg;
border = bright.green;
childBorder = bright.green;
indicator = bright.green;
text = util.fg;
};
unfocused = {
background = normal.black;
border = util.bg;
childBorder = util.bg;
indicator = util.bg;
text = normal.white;
};
urgent = {
background = normal.red;
border = normal.red;
childBorder = normal.red;
indicator = normal.red;
text = normal.blue;
};
};
};
systemd.enable = true;
wrapperFeatures = {
base = true;
gtk = true;
};
xwayland = true;
};
}

View file

@ -1,50 +0,0 @@
{
config,
lib,
pkgs,
palette-hex,
...
}: let
palette-hex = pkgs.lib.nix-rice.palette.toRgbHex pkgs.rice.palette;
palette-shex = pkgs.lib.nix-rice.palette.toRGBShortHex pkgs.rice.palette;
in {
config.home.packages = [pkgs.swaynotificationcenter];
config.ezConf = {
"swaync/config.json" = ../dots/swaync/config.json;
"swaync/configSchema.json" = ../dots/swaync/configSchema.json;
};
config.ezServices = {
swaync = "${lib.getExe pkgs.swaynotificationcenter}";
};
config.xdg.configFile."swaync/style.css" = {
enable = true;
text = with palette-hex; (builtins.replaceStrings
[
"#PANELBG"
"#COLBORDER"
"#NOTIBGNORM"
"#NOTIBGHOVER"
"#NOTIBGFOCUS"
"#NOTIBGCLOSE"
"#NOTIBGHVERCLOSE"
"#BGSELECTED"
"#FONT"
"#BORDER"
"#ROUNDING"
]
[
bright.black
bright.yellow
bright.black
normal.black
normal.black
normal.black
bright.black
bright.black
pkgs.rice.fonts.sans.name
(builtins.toString pkgs.rice.borders.thickness)
(builtins.toString pkgs.rice.borders.rounding)
]
(builtins.readFile ../dots/swaync/style.css));
};
}

View file

@ -1,11 +0,0 @@
{
config,
lib,
pkgs,
swayosd,
...
}: {
config.ezServices = {
swayosd = "${lib.getExe' swayosd "swayosd-server"}";
};
}

View file

@ -1,20 +0,0 @@
{
inputs,
outputs,
lib,
config,
pkgs,
...
}: {
imports = [
./home.nix
];
home.packages = with pkgs; [
nicotine-plus
];
home = {
username = "twitchin";
homeDirectory = "/home/twitchin";
};
}

View file

@ -77,18 +77,6 @@
hardware.opengl.driSupport32Bit = true;
#input stuff
# services.xserver = {
# enable = true; # SDDM requires this
# xkb.options = "caps:escape";
# xkb.layout = "us";
# desktopManager.plasma5 = {
# enable = true;
# enableQt5Integration = true; # for plasma6
# runUsingSystemd = true;
# };
# };
services.libinput.enable = true;
services.desktopManager.cosmic.enable = true;
services.displayManager.cosmic-greeter.enable = true;
@ -97,11 +85,6 @@
services.system76-scheduler.enable = true;
# environment.plasma5.excludePackages = with pkgs.libsForQt5; [
# konsole
# gwenview
# ];
services.flatpak.enable = true;
security.polkit.enable = true;
@ -124,9 +107,6 @@
pulse.enable = true;
};
qt.enable = true;
qt.platformTheme = "kde";
qt.style = "kvantum";
programs.dconf.enable = true;
services.colord.enable = true;
@ -154,8 +134,6 @@
cachix
alejandra
libsForQt5.qtstyleplugin-kvantum
];
services.atuin.enable = true;

View file

@ -1,45 +0,0 @@
{ lib
, buildPythonPackage
, cython
, fetchFromGitHub
, keyutils
, pytestCheckHook
}:
buildPythonPackage rec {
pname = "keyutils";
version = "0.6";
# github version comes bundled with tests
src = fetchFromGitHub {
owner = "sassoftware";
repo = "python-keyutils";
rev = version;
sha256 = "0pfqfr5xqgsqkxzrmj8xl2glyl4nbq0irs0k6ik7iy3gd3mxf5g1";
};
postPatch = ''
substituteInPlace setup.py --replace '"pytest-runner"' ""
'';
preBuild = ''
cython keyutils/_keyutils.pyx
'';
preCheck = ''
rm -rf keyutils
'';
buildInputs = [ keyutils ];
nativeBuildInputs = [ cython ];
nativeCheckInputs = [
pytestCheckHook
];
meta = {
description = "A set of python bindings for keyutils";
homepage = "https://github.com/sassoftware/python-keyutils";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [ primeos ];
};
}