Remove flood and river

This commit is contained in:
2025-08-04 01:04:58 +02:00
parent 27836f53dd
commit 9eecdb8f34
8 changed files with 25 additions and 606 deletions
-52
View File
@@ -1,52 +0,0 @@
{
pkgs,
user,
...
}: {
imports = [
../../modules/wm
../../modules/gui
];
programs.uwsm = {
enable = true;
waylandCompositors = {
river = {
prettyName = "river";
comment = "river compositor managed by UWSM";
binPath = "${pkgs.river}/bin/river";
};
};
};
services.greetd = {
enable = true;
settings = {
default_session = {
command = "${pkgs.greetd.greetd}/bin/agreety --cmd zsh";
user = "greeter";
};
initial_session = {
command = "uwsm start -S river-uwsm.desktop";
user = user;
};
};
};
# Without this, greetd would depend on graphical.target & would get activated before
# uwsm. This leads to a race that can:
# - fail startup & retry it (leading to a ~10s delay)
# - make graphical services start before river.
# To prevent those issue, simply target the default tty & greetd's inital_session will
# start uwsm & end up reaching graphical.target
# systemd.defaultUnit = lib.mkForce "multi-user.target";
xdg.portal = {
enable = true;
wlr.enable = true;
# gtk portal needed to make gtk apps happy
extraPortals = [pkgs.xdg-desktop-portal-gtk];
config.common.default = "*";
};
}
-231
View File
@@ -1,231 +0,0 @@
{
pkgs,
config,
...
}: let
cliphist = "${pkgs.cliphist}/bin/cliphist";
common_binds = {
"None XF86AudioRaiseVolume" = "spawn '${pkgs.pamixer}/bin/pamixer -i 5'";
"None XF86AudioLowerVolume" = "spawn '${pkgs.pamixer}/bin/pamixer -d 5'";
"None XF86AudioMute" = "spawn '${pkgs.pamixer}/bin/pamixer --toggle-mute'";
"None XF86AudioMedia" = "spawn '${pkgs.playerctl}/bin/playerctl play-pause'";
"None XF86AudioPlay" = "spawn '${pkgs.playerctl}/bin/playerctl play-pause'";
"None XF86AudioPause" = "spawn '${pkgs.playerctl}/bin/playerctl play-pause'";
"None XF86AudioPrev" = "spawn '${pkgs.playerctl}/bin/playerctl playerctl previous'";
"None XF86AudioNext" = "spawn '${pkgs.playerctl}/bin/playerctl playerctl next'";
"None XF86MonBrightnessUp" = "spawn '${pkgs.brightnessctl}/bin/brightnessctl s +5%'";
"None XF86MonBrightnessDown" = "spawn '${pkgs.brightnessctl}/bin/brightnessctl s 5%-'";
};
in {
imports = [
../../modules/gui/home.nix
../../modules/wm/home.nix
];
systemd.user.services.polkit-gnome-authentication-agent-1 = {
Unit = {
Description = "polkit-gnome-authentication-agent-1";
Wants = ["graphical-session.target"];
After = ["graphical-session.target"];
};
Install = {
WantedBy = ["graphical-session.target"];
};
Service = {
Type = "simple";
ExecStart = "${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1";
Restart = "on-failure";
RestartSec = 1;
TimeoutStopSec = 10;
};
};
xdg.configFile."river-luatile/layout.lua".source = ./layout.lua;
wayland.windowManager.river = {
enable = true;
extraSessionVariables = {
XDG_CURRENT_DESKTOP = "river";
};
settings = {
default-layout = "luatile";
spawn = [
"${pkgs.river-luatile}/bin/river-luatile"
"wallpaper"
"ags"
];
default-attach-mode = "top";
focus-follows-cursor = "normal";
set-cursor-warp = "on-focus-change";
hide-cursor = {
when-typing = true;
};
set-repeat = "25 600";
keyboard-layout = "-options 'caps:escape_shifted_capslock' us";
input = {
"'*'" = {
events = true;
accel-profile = "adaptive";
pointer-accel = 0;
click-method = "button-areas";
tap = true;
drag = true;
disable-while-typing = true;
middle-emulation = true;
natural-scroll = true;
tap-button-map = "left-right-middle";
scroll-method = "two-finger";
};
"'*Mouse'" = {
natural-scroll = "disabled";
};
"'*Vertical'" = {
natural-scroll = "disabled";
};
};
# border-color-focused = "0x94e2d5";
# border-color-unfocused = "0x00000000";
# border-color-urgent = "0xcba6f7";
border-width = 0;
rule-add = {
"-app-id" = {
"discord" = "tags $((1 << 2))";
"vesktop" = "tags $((1 << 2))";
"'YouTube Music'" = "tags $((1 << 1))";
# disable all client side decorations
"'*'" = "ssd";
};
};
declare-mode = ["normal" "locked" "passthrough"];
map = {
normal =
{
"Super+Shift Q" = "exit";
"Super C" = "close";
"Super K" = "focus-view next";
"Super J" = "focus-view previous";
"Super+Shift K" = "swap previous";
"Super+Shift J" = "swap previous";
"Super Return" = "zoom";
"Super Period" = "focus-output next";
"Super Comma" = "focus-output previous";
"Super+Shift Period" = "send-to-output -current-tags next";
"Super+Shift Comma" = "send-to-output -current-tags previous";
"Super+Control+Shift Period" = "send-to-output next";
"Super+Control+Shift Comma" = "send-to-output previous";
"Super H" = "send-layout-cmd luatile 'set_mfact(-0.05)'";
"Super L" = "send-layout-cmd luatile 'set_mfact( 0.05)'";
"Super U" = "send-layout-cmd luatile 'set_mcount(-1)'";
"Super I" = "send-layout-cmd luatile 'set_mcount( 1)'";
"Super T" = "send-layout-cmd luatile 'set_layout(\"tiling\")'";
"Super M" = "send-layout-cmd luatile 'set_layout(\"monocle\")'";
"Super D" = "send-layout-cmd luatile 'set_layout(\"deck\")'";
"Super F" = "toggle-fullscreen";
"Super+Shift F" = "toggle-float";
"Super R" = "spawn 'uwsm app -- ${config.home.sessionVariables.BROWSER}'";
"Super E" = "spawn 'uwsm app -- ${config.home.sessionVariables.TERMINAL}'";
"Super P" = ''spawn 'rofi -show drun -show-icons -run-command "uwsm app -- {cmd}"' '';
"Super X" = "spawn 'screenshot'";
"Super+Control X" = "spawn 'screenshot-freeze'";
"Super+Shift X" = "spawn 'uwsm app -- record'";
"Super B" = "spawn '${pkgs.hyprpicker}/bin/hyprpicker | wl-copy'";
"Super V" = "spawn '${cliphist} list | rofi -dmenu -display-columns 2 | ${cliphist} decode | wl-copy'";
"Super+Shift L" = "spawn 'loginctl lock-session'";
"Super+Shift Backslash" = "enter-mode passthrough";
}
// common_binds;
locked = common_binds;
passthrough = {
"Super+Shift Backslash" = "enter-mode normal";
};
};
map-pointer = {
normal = {
"Super+Shift BTN_LEFT" = "move-view";
"Super+Shift BTN_RIGHT" = "resize-view";
};
};
};
extraConfig = ''
for i in $(seq 1 9)
do
tags=$((1 << (i - 1)))
riverctl map normal Super "$i" set-focused-tags -alternate $tags
riverctl map normal Super+Shift "$i" set-view-tags $tags
riverctl map normal Super+Control "$i" toggle-focused-tags $tags
riverctl map normal Super+Shift+Control "$i" toggle-view-tags $tags
done
all_tags=$(((1 << 32) - 1))
riverctl map normal Super 0 set-focused-tags -alternate "$all_tags"
riverctl map normal Super+Shift 0 set-view-tags "$all_tags"
# Focus second screen by default (also spawn apps there)
riverctl focus-output DP-1
riverctl set-focused-tags $((1 << 3))
${pkgs.uwsm}/bin/uwsm finalize DISPLAY WAYLAND_DISPLAY XDG_CURRENT_DESKTOP NIXOS_OZONE_WL XCURSOR_THEME XCURSOR_SIZE
hyprlock --immediate
'';
# we use uwsm instead.
systemd.enable = false;
};
home.packages = with pkgs; [
gnome-control-center
gnome-weather
wdisplays
];
services.kanshi = {
enable = true;
systemdTarget = "graphical-session.target";
settings = [
{
output.criteria = "eDP-1";
output.scale = 1.6;
}
{
profile.name = "undocked";
profile.outputs = [
{
criteria = "eDP-1";
status = "enable";
}
];
}
{
profile.name = "docked";
profile.outputs = [
{
criteria = "eDP-1";
status = "disable";
}
{
criteria = "Dell Inc. DELL S2722QC 2HHZH24";
# position = "1500,0";
position = "0,900";
scale = 1.7;
}
{
criteria = "*";
position = "0,0";
scale = 1.4;
}
];
}
];
};
}
-174
View File
@@ -1,174 +0,0 @@
---@diagnostic disable: lowercase-global, undefined-global
local inner_gaps = 10
local outer_gaps = 15
local smart_gaps = true
local outputs = {}
function _get_output(name)
local output = outputs[name]
if output ~= nil then
return output
end
outputs[name] = {
mfact = 0.65,
mcount = 1,
layout = "tiling",
alayout = "monocle"
}
return outputs[name]
end
-- The most important function - the actual layout generator
--
-- The argument is a table with:
-- * Focused tags (`args.tags`)
-- * Window count (`args.count`)
-- * Output width (`args.width`)
-- * Output height (`args.height`)
-- * Output name (`args.output`)
--
-- The return value must be a table with exactly `count` entries. Each entry is a table with four
-- numbers:
-- * X coordinate
-- * Y coordinate
-- * Window width
-- * Window height
--
-- This example is a simplified version of `rivertile`
function handle_layout(args)
local output = _get_output(args.output)
-- Prevent mcount from growing too much. We can't do that in the set function.
output.mcount = math.min(output.mcount, args.count)
local ret = {}
if args.count == 1 or output.layout == "monocle" then
if smart_gaps then
for _ = 0, (args.count - 1) do
table.insert(ret, { 0, 0, args.width, args.height })
end
else
for _ = 0, (args.count - 1) do
table.insert(ret, { outer_gaps, outer_gaps, args.width - outer_gaps * 2, args.height - outer_gaps * 2 })
end
end
return ret
end
local width = args.width - outer_gaps * 2
local height = args.height - outer_gaps * 2
local mcount = math.min(output.mcount, args.count)
local scount = math.max(args.count - mcount, 0)
local old_scount = scount
if output.layout == "deck" and scount > 0 then
scount = 1;
end
local main_w = (width * output.mfact) - (inner_gaps / 2)
local side_w = (width * (1 - output.mfact)) - (inner_gaps / 2)
local main_h = (height - (inner_gaps * (mcount - 1))) / mcount
local side_h = (height - (inner_gaps * (scount - 1))) / scount
scount = old_scount
if args.count <= output.mcount then
main_w = width
end
for i = 0, (mcount - 1) do
table.insert(ret, {
outer_gaps,
outer_gaps + i * (main_h + inner_gaps),
main_w,
main_h,
})
end
for i = 0, (scount - 1) do
local y = outer_gaps + i * (side_h + inner_gaps)
if output.layout == "deck" then
y = outer_gaps
end
table.insert(ret, {
main_w + outer_gaps * 2,
y,
side_w,
side_h,
})
end
return ret
end
-- This optional function returns the metadata for the current layout.
-- Currently only `name` is supported, the name of the layout. It get's passed
-- the same `args` as handle_layout()
function handle_metadata(args)
local output = _get_output(args.output)
if output.layout == "tiling" then
return { name = "[]=" }
elseif output.layout == "monocle" then
return { name = string.format("[%d]", args.count) }
elseif output.layout == "deck" then
return { name = "[D]" }
else
return { name = "><>" }
end
end
-- IMPORTANT: User commands send via `riverctl send-layout-cmd` are treated as lua code.
-- Active tags are stored in `CMD_TAGS` global variable.
-- Output name is stored in `CMD_OUTPUT` global variable.
-- Here is an example of a function that can be mapped to some key
-- Run with `riverctl send-layout-cmd luatile "toggle_gaps()"`
function set_mfact(diff)
local output = _get_output(CMD_OUTPUT)
output.mfact = math.max(0, math.min(output.mfact + diff, 1))
end
function set_mcount(diff)
local output = _get_output(CMD_OUTPUT)
-- we don't have the number of clients so we can't set a max value there.
output.mcount = math.max(0, output.mcount + diff)
end
function set_layout(name)
local output = _get_output(CMD_OUTPUT)
if output.layout == name then
output.layout = output.alayout
output.alayout = name
else
output.alayout = output.layout
output.layout = name
end
end
-- Just an helper function to print tables.
function inspect(tbl)
local result = "{"
for k, v in pairs(tbl) do
-- Check the key type (ignore any numerical keys - assume its an array)
if type(k) == "string" then
result = result .. "[\"" .. k .. "\"]" .. "="
end
-- Check the value type
if type(v) == "table" then
result = result .. inspect(v)
elseif type(v) == "boolean" then
result = result .. tostring(v)
else
result = result .. "\"" .. v .. "\""
end
result = result .. ","
end
-- Remove leading commas from the result
if result ~= "" then
result = result:sub(1, result:len() - 1)
end
return result .. "}"
end
-51
View File
@@ -16,21 +16,6 @@
wrapProgram $out/bin/guesspath --prefix PATH : '${lib.makeBinPath propagatedBuildInputs}'
";
};
smartrss = pkgs.stdenv.mkDerivation rec {
name = "smartrss";
nativeBuildInputs = with pkgs; [makeWrapper];
propagatedBuildInputs = with pkgs; [
python3Packages.guessit
curl
jq
];
dontUnpack = true;
installPhase = "
install -Dm755 ${./smartrss.sh} $out/bin/smartrss
wrapProgram $out/bin/smartrss --prefix PATH : '${lib.makeBinPath propagatedBuildInputs}'
";
};
in {
imports = [
./otel.nix
@@ -156,42 +141,6 @@ in {
defaults.email = "zoe.roux@zoriya.dev";
};
services.transmission = {
enable = true;
package = pkgs.transmission_4;
# Make downloaded items readable/writable by users
group = "users";
settings = {
umask = "002";
incomplete-dir-enabled = false;
download-dir = "/mnt/kyoo/downloads";
download-queue-enabled = false;
rename-partial-files = false;
trash-can-enabled = false;
script-torrent-added-enabled = true;
script-torrent-added-filename = "${guesspath}/bin/guesspath";
};
};
# Also allows transmission to reach theses files
systemd.services.transmission.serviceConfig.BindPaths = [
"/mnt/kyoo/downloads"
"/mnt/kyoo/shows"
"/mnt/kyoo/lives"
"/mnt/kyoo/manga"
];
systemd.services.flood = {
enable = true;
wantedBy = ["multi-user.target"];
after = ["transmission.service"];
requires = ["transmission.service"];
path = with pkgs; [mediainfo smartrss];
serviceConfig = {
ExecStart = "${pkgs.flood}/bin/flood --rundir=/var/lib/flood --trurl=http://127.0.0.1:9091/transmission/rpc --truser '' --trpass ''";
User = "transmission";
Restart = "on-failure";
};
};
services.gitea = {
enable = true;
settings.server = rec {
-9
View File
@@ -1,9 +0,0 @@
#!/usr/bin/env bash
set -e
name=$(guessit "$1" -P title | tr -d "[:punct:]")
ls /mnt/kyoo/shows/ | tr -d "[:punct:]" | grep -qix "$name"
echo "Downloading $1"
exit 80
Generated
+24 -59
View File
@@ -56,11 +56,11 @@
]
},
"locked": {
"lastModified": 1753121425,
"narHash": "sha256-TVcTNvOeWWk1DXljFxVRp+E0tzG1LhrVjOGGoMHuXio=",
"lastModified": 1754091436,
"narHash": "sha256-XKqDMN1/Qj1DKivQvscI4vmHfDfvYR2pfuFOJiCeewM=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "644e0fc48951a860279da645ba77fe4a6e814c5e",
"rev": "67df8c627c2c39c41dbec76a1f201929929ab0bd",
"type": "github"
},
"original": {
@@ -90,22 +90,6 @@
"type": "indirect"
}
},
"flood": {
"flake": false,
"locked": {
"lastModified": 1738516486,
"narHash": "sha256-B1hAmv1sRxqHM9EBO7Wij54Q8xK8Cpasb7DDSovI3qM=",
"owner": "zoriya",
"repo": "flood",
"rev": "875ae36d17300c630c2370f132eb385a048fc1e1",
"type": "github"
},
"original": {
"owner": "zoriya",
"repo": "flood",
"type": "github"
}
},
"git-hooks": {
"inputs": {
"flake-compat": "flake-compat_2",
@@ -180,11 +164,11 @@
]
},
"locked": {
"lastModified": 1754085240,
"narHash": "sha256-kVHCrTWEe8B1thAhFag1bk4QPY0ZP45V9vPbrwPHoNo=",
"lastModified": 1754225444,
"narHash": "sha256-mv01SQtqlhBMavc1dgNjgqJw4WfZxy+w3xBgwJU3YmU=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "e102920c1becb114645c6f92fe14edc0b05cc229",
"rev": "0de18bd5c6681280d7ae017fa34ffd91bdcf0557",
"type": "github"
},
"original": {
@@ -221,11 +205,11 @@
"treefmt-nix": "treefmt-nix"
},
"locked": {
"lastModified": 1754050710,
"narHash": "sha256-zGGx7XFSJd1mRIrUrDbjKGXDjfk/aPRToDbLrshLbUU=",
"lastModified": 1754255242,
"narHash": "sha256-upKFxktmKdohNMtOAUDgvqQWoeJknPuToO+mIlsEgX4=",
"owner": "nix-community",
"repo": "neovim-nightly-overlay",
"rev": "84d2911ae6b97e160ed8de8ece7bd1068c2bf686",
"rev": "0c756117aa0efb7c44ac98b4761334236549148b",
"type": "github"
},
"original": {
@@ -237,11 +221,11 @@
"neovim-src": {
"flake": false,
"locked": {
"lastModified": 1753992225,
"narHash": "sha256-QUlWhBgDm9No+RkI33faSqsSZNU/QhZjMOP333FjN38=",
"lastModified": 1754177742,
"narHash": "sha256-XdTNh9hDRxahnvIB9m2t/8RovK0qV1NsJ0bw86/nZVM=",
"owner": "neovim",
"repo": "neovim",
"rev": "c3a4d125296caaf15ff424e7609e731a8b4d37e7",
"rev": "93f5bd0caf9037f95ee77288bfd424008bc3a14b",
"type": "github"
},
"original": {
@@ -277,11 +261,11 @@
]
},
"locked": {
"lastModified": 1753589988,
"narHash": "sha256-y1JlcMB2dKFkrr6g+Ucmj8L//IY09BtSKTH/A7OU7mU=",
"lastModified": 1754195341,
"narHash": "sha256-YL71IEf2OugH3gmAsxQox6BJI0KOcHKtW2QqT/+s2SA=",
"owner": "nix-community",
"repo": "nix-index-database",
"rev": "f0736b09c43028fd726fb70c3eb3d1f0795454cf",
"rev": "b7fcd4e26d67fca48e77de9b0d0f954b18ae9562",
"type": "github"
},
"original": {
@@ -307,11 +291,11 @@
},
"nixos-hardware": {
"locked": {
"lastModified": 1753122741,
"narHash": "sha256-nFxE8lk9JvGelxClCmwuJYftbHqwnc01dRN4DVLUroM=",
"lastModified": 1754229794,
"narHash": "sha256-yOl7REX6O/1mh+tpscJPKgjK6nmXSMOB1xhmDNAMUZM=",
"owner": "NixOS",
"repo": "nixos-hardware",
"rev": "cc66fddc6cb04ab479a1bb062f4d4da27c936a22",
"rev": "a872d985392ee5b19d8409bfcc3f106de2070070",
"type": "github"
},
"original": {
@@ -329,11 +313,11 @@
]
},
"locked": {
"lastModified": 1753704990,
"narHash": "sha256-5E14xuNWy2Un1nFR55k68hgbnD8U2x/rE5DXJtYKusw=",
"lastModified": 1754260137,
"narHash": "sha256-IViMH6Fwj8nwO1nuYCqOTpjm9OK9rQ0w8nmoOwPlo98=",
"owner": "nix-community",
"repo": "NixOS-WSL",
"rev": "58c814cc6d4a789191f9c12e18277107144b0c91",
"rev": "57ba096649fa4e12dc564e8e3c529255baf89b35",
"type": "github"
},
"original": {
@@ -357,26 +341,8 @@
"type": "indirect"
}
},
"river-src": {
"flake": false,
"locked": {
"lastModified": 1742891484,
"narHash": "sha256-7ZSKYw0ZbYUWBp2Djw2W2Gg15W2TQzBLYpoarqpJFN8=",
"owner": "zoriya",
"repo": "river",
"rev": "a40883358d4a00e96e43ef95bd115172749b81a9",
"type": "github"
},
"original": {
"owner": "zoriya",
"ref": "0.3.x",
"repo": "river",
"type": "github"
}
},
"root": {
"inputs": {
"flood": "flood",
"home-manager": "home-manager",
"impermanence": "impermanence",
"neovim-nightly": "neovim-nightly",
@@ -386,7 +352,6 @@
"nixos-hardware": "nixos-hardware",
"nixos-wsl": "nixos-wsl",
"nixpkgs": "nixpkgs",
"river-src": "river-src",
"tmux": "tmux",
"zen-browser": "zen-browser"
}
@@ -415,11 +380,11 @@
]
},
"locked": {
"lastModified": 1753772294,
"narHash": "sha256-8rkd13WfClfZUBIYpX5dvG3O9V9w3K9FPQ9rY14VtBE=",
"lastModified": 1754061284,
"narHash": "sha256-ONcNxdSiPyJ9qavMPJYAXDNBzYobHRxw0WbT38lKbwU=",
"owner": "numtide",
"repo": "treefmt-nix",
"rev": "6b9214fffbcf3f1e608efa15044431651635ca83",
"rev": "58bd4da459f0a39e506847109a2a5cfceb837796",
"type": "github"
},
"original": {
-8
View File
@@ -24,14 +24,6 @@
url = "github:nix-community/neovim-nightly-overlay";
inputs.nixpkgs.follows = "nixpkgs";
};
flood = {
url = "github:zoriya/flood";
flake = false;
};
river-src = {
url = "github:zoriya/river/0.3.x";
flake = false;
};
zen-browser = {
url = "github:youwen5/zen-browser-flake";
inputs.nixpkgs.follows = "nixpkgs";
+1 -22
View File
@@ -1,9 +1,4 @@
{
flood,
river-src,
tmux,
...
}: self: super: let
{tmux, ...}: self: super: let
wrapProgram = drv: bins: wrapProgramFlags:
super.symlinkJoin {
name = drv.name;
@@ -21,22 +16,6 @@
--add-flags "--ozone-platform=wayland" \
--add-flags "--disable-smooth-scrolling"'';
in {
# Use my fork of flood to enable smart scripts.
flood = super.flood.overrideAttrs rec {
src = flood;
npmDeps = pnpmDeps;
pnpmDeps = super.pnpm_9.fetchDeps {
pname = "flood";
version = "4.9.4-dirty";
src = flood;
hash = "sha256-E2VxRcOMLvvCQb9gCAGcBTsly571zh/HWM6Q1Zd2eVw=";
};
};
river = super.river.overrideAttrs {
src = river-src;
};
tmux = super.tmux.overrideAttrs {
src = tmux;
};