1
1
Fork 0

Compare commits

...

17 commits

Author SHA1 Message Date
1aed4c8c73
nix: format with alejandra
Signed-off-by: Myned <dev@bjork.tech>
2024-09-11 18:30:16 -05:00
31f8470c94
minimize: remove extraneous +
Signed-off-by: Myned <dev@bjork.tech>
2024-09-11 18:30:16 -05:00
48646441dd
toggle: refactor with proper flags
Signed-off-by: Myned <dev@bjork.tech>
2024-09-11 18:30:16 -05:00
e6d85b157e
screenshot: enable freeze
Signed-off-by: Myned <dev@bjork.tech>
2024-09-11 18:30:16 -05:00
db86039b20
waybar: add office workspace
Signed-off-by: Myned <dev@bjork.tech>
2024-09-11 18:30:16 -05:00
a367890961
wireshark: fix gui package
Signed-off-by: Myned <dev@bjork.tech>
2024-09-11 18:30:16 -05:00
32d1553b4a
nano: show linenumbers
Signed-off-by: Myned <dev@bjork.tech>
2024-09-11 18:30:16 -05:00
b22a3fb2a2
hyprland: replace browser tag
Signed-off-by: Myned <dev@bjork.tech>
2024-09-11 18:30:16 -05:00
0abea95956
hyprland: switch to custom accel profile for trackball
Signed-off-by: Myned <dev@bjork.tech>
2024-09-11 18:30:16 -05:00
566734e009
hyprland: reduce repeat delay
Signed-off-by: Myned <dev@bjork.tech>
2024-09-11 18:30:16 -05:00
d6859a553a
hyprland: focus window under mouse on close
Signed-off-by: Myned <dev@bjork.tech>
2024-09-11 18:30:16 -05:00
1bcd27d06e
hyprland: move binds section to variables.nix
Signed-off-by: Myned <dev@bjork.tech>
2024-09-11 18:30:16 -05:00
dd41c57304
hyprland: disable layer animations
Signed-off-by: Myned <dev@bjork.tech>
2024-09-11 18:30:16 -05:00
003d9dc60b
libvirt: use env var to specify uri
Signed-off-by: Myned <dev@bjork.tech>
2024-09-11 18:30:16 -05:00
6bac40e352
laptop: disable includeBuildDependencies
Signed-off-by: Myned <dev@bjork.tech>
2024-09-11 18:30:16 -05:00
b7bb3eeaa6
hyprland: refactor binds and rules
Signed-off-by: Myned <dev@bjork.tech>
2024-09-11 18:30:16 -05:00
b8ef379dc1
nix: switch to alejandra formatter
Signed-off-by: Myned <dev@bjork.tech>
2024-09-11 18:30:16 -05:00
183 changed files with 2645 additions and 2967 deletions

View file

@ -3,33 +3,26 @@
inputs, inputs,
lib, lib,
... ...
}: }: {
age.secrets = let
{
age.secrets =
let
secret = filename: { secret = filename: {
file = "${inputs.self}/secrets/${filename}"; file = "${inputs.self}/secrets/${filename}";
}; };
in in {
{
"common/nix/access-tokens.conf" = secret "common/nix/access-tokens.conf"; "common/nix/access-tokens.conf" = secret "common/nix/access-tokens.conf";
}; };
### NixOS ### NixOS
nixpkgs = nixpkgs = let
let
config = { config = {
allowUnfree = true; allowUnfree = true;
allowInsecurePredicate = allowInsecurePredicate = pkg: let
pkg:
let
name = lib.getName pkg; name = lib.getName pkg;
in in
# HACK: Allow all insecure electron versions # HACK: Allow all insecure electron versions
name == "electron" name
== "electron"
# HACK: Some Matrix clients rely on libolm, which is deprecated # HACK: Some Matrix clients rely on libolm, which is deprecated
# https://github.com/NixOS/nixpkgs/pull/334638 # https://github.com/NixOS/nixpkgs/pull/334638
|| name == "cinny" || name == "cinny"
@ -38,16 +31,13 @@
|| name == "olm" || name == "olm"
|| name == "openssl"; # Cisco Packet Tracer || name == "openssl"; # Cisco Packet Tracer
}; };
in in {
{
inherit config; inherit config;
overlays = [ overlays = [
( (
final: prev: final: prev: let
let nixpkgs = branch:
nixpkgs =
branch:
import inputs."nixpkgs-${branch}" { import inputs."nixpkgs-${branch}" {
inherit config; inherit config;
system = prev.system; system = prev.system;
@ -57,8 +47,7 @@
unstable = nixpkgs "unstable"; unstable = nixpkgs "unstable";
staging-next = nixpkgs "staging-next"; staging-next = nixpkgs "staging-next";
local = nixpkgs "local"; local = nixpkgs "local";
in in {
{
# Overlay nixpkgs branches # Overlay nixpkgs branches
#?? nixpkgs.BRANCH.PACKAGE #?? nixpkgs.BRANCH.PACKAGE
inherit stable unstable staging-next; inherit stable unstable staging-next;

View file

@ -6,12 +6,10 @@
#?? nix run .#genflake flake.nix #?? nix run .#genflake flake.nix
# TODO: Remove flakegen hook when nix expressions are officially implemented # TODO: Remove flakegen hook when nix expressions are officially implemented
# https://github.com/NixOS/nix/issues/3966 # https://github.com/NixOS/nix/issues/3966
{ {
# https://wiki.nixos.org/wiki/Flakes # https://wiki.nixos.org/wiki/Flakes
# https://nix.dev/manual/nix/2.18/command-ref/new-cli/nix3-flake.html # https://nix.dev/manual/nix/2.18/command-ref/new-cli/nix3-flake.html
inputs = inputs = let
let
flake = url: {inherit url;}; flake = url: {inherit url;};
follows = input: {inputs.${input}.follows = input;}; follows = input: {inputs.${input}.follows = input;};
stable = input: {inputs.${input}.follows = "${input}-stable";}; stable = input: {inputs.${input}.follows = "${input}-stable";};
@ -21,8 +19,7 @@
inherit url; inherit url;
flake = false; flake = false;
}; };
in in {
{
#?? branch = "git+https://REPO?ref=BRANCH" #?? branch = "git+https://REPO?ref=BRANCH"
#?? commit = "git+https://REPO?ref=BRANCH&rev=COMMIT" #?? commit = "git+https://REPO?ref=BRANCH&rev=COMMIT"
#?? tag = "git+https://REPO?ref=refs/tags/TAG" #?? tag = "git+https://REPO?ref=refs/tags/TAG"
@ -62,24 +59,17 @@
fw-fanctrl = flake "github:TamtamHero/fw-fanctrl/packaging/nix" // unstable "nixpkgs"; fw-fanctrl = flake "github:TamtamHero/fw-fanctrl/packaging/nix" // unstable "nixpkgs";
hypridle = flake "github:hyprwm/hypridle" // unstable "nixpkgs"; hypridle = flake "github:hyprwm/hypridle" // unstable "nixpkgs";
#// hyprland = flake "git+https://github.com/hyprwm/Hyprland?submodules=1" // unstable "nixpkgs"; #// hyprland = flake "git+https://github.com/hyprwm/Hyprland?submodules=1" // unstable "nixpkgs";
hyprland = hyprland = flake "git+https://github.com/hyprwm/Hyprland?ref=refs/tags/v0.43.0&submodules=1" // unstable "nixpkgs";
flake "git+https://github.com/hyprwm/Hyprland?ref=refs/tags/v0.43.0&submodules=1" #// hyprland = flake "git+https://github.com/UjinT34/Hyprland?ref=vrr-cursor-fix&submodules=1" // unstable "nixpkgs";
// unstable "nixpkgs";
#// hyprland =
#// flake "git+https://github.com/UjinT34/Hyprland?ref=vrr-cursor-fix&submodules=1"
#// // unstable "nixpkgs";
hyprland-contrib = flake "github:hyprwm/contrib" // unstable "nixpkgs"; hyprland-contrib = flake "github:hyprwm/contrib" // unstable "nixpkgs";
hyprland-plugins = hyprland-plugins = flake "github:hyprwm/hyprland-plugins" // unstable "nixpkgs" // follows "hyprland";
flake "github:hyprwm/hyprland-plugins" // unstable "nixpkgs" // follows "hyprland";
hyprlock = flake "github:hyprwm/hyprlock" // unstable "nixpkgs"; hyprlock = flake "github:hyprwm/hyprlock" // unstable "nixpkgs";
hyprpaper = flake "github:hyprwm/hyprpaper" // unstable "nixpkgs"; hyprpaper = flake "github:hyprwm/hyprpaper" // unstable "nixpkgs";
hyprpicker = flake "github:hyprwm/hyprpicker" // unstable "nixpkgs"; hyprpicker = flake "github:hyprwm/hyprpicker" // unstable "nixpkgs";
nix-flatpak = flake "github:gmodena/nix-flatpak?ref=v0.4.1"; nix-flatpak = flake "github:gmodena/nix-flatpak?ref=v0.4.1";
nix-vscode-extensions = flake "github:nix-community/nix-vscode-extensions" // unstable "nixpkgs"; nix-vscode-extensions = flake "github:nix-community/nix-vscode-extensions" // unstable "nixpkgs";
nixd = flake "github:nix-community/nixd" // unstable "nixpkgs"; nixd = flake "github:nix-community/nixd" // unstable "nixpkgs";
xdg-desktop-portal-hyprland = xdg-desktop-portal-hyprland = flake "github:hyprwm/xdg-desktop-portal-hyprland" // unstable "nixpkgs";
flake "github:hyprwm/xdg-desktop-portal-hyprland"
// unstable "nixpkgs";
# Server flakes # Server flakes
conduwuit = flake "github:Myned/conduwuit" // unstable "nixpkgs"; conduwuit = flake "github:Myned/conduwuit" // unstable "nixpkgs";
@ -101,38 +91,39 @@
outputs = inputs: { outputs = inputs: {
# TODO: Use forAllSystems # TODO: Use forAllSystems
# FIXME: nixd always uses nixfmt when importing flakes
# https://nix.dev/manual/nix/2.18/command-ref/new-cli/nix3-fmt # https://nix.dev/manual/nix/2.18/command-ref/new-cli/nix3-fmt
formatter.x86_64-linux = inputs.nixpkgs-unstable.legacyPackages.x86_64-linux.nixfmt-rfc-style; # https://github.com/kamadorueda/alejandra/blob/main/STYLE.md
formatter.x86_64-linux = inputs.nixpkgs-unstable.legacyPackages.x86_64-linux.alejandra;
nixosConfigurations = nixosConfigurations = let
let
# TODO: Use inline modules instead of specialArgs # TODO: Use inline modules instead of specialArgs
# https://jade.fyi/blog/flakes-arent-real#nixos-modules # https://jade.fyi/blog/flakes-arent-real#nixos-modules
# Boilerplate systems with global imports # Boilerplate systems with global imports
#!! There is no default nixpkgs, inputs.<nixpkgs|home-manager>-BRANCH must exist #!! There is no default nixpkgs, inputs.<nixpkgs|home-manager>-BRANCH must exist
#?? branch = common "BRANCH" "ARCHITECTURE" [ MODULES ] #?? branch = common "BRANCH" "ARCHITECTURE" [ MODULES ]
common = common = branch: arch: modules:
branch: arch: modules:
inputs."nixpkgs-${branch}".lib.nixosSystem { inputs."nixpkgs-${branch}".lib.nixosSystem {
system = arch; system = arch;
specialArgs = {inherit inputs;};
specialArgs = {
inherit inputs;
};
# TODO: Clean up optional attributes with each new release # TODO: Clean up optional attributes with each new release
#!! Options will diverge between branches over time #!! Options will diverge between branches over time
#?? with lib; optionalAttrs (versionAtLeast version "VERSION") { ... }; #?? with lib; optionalAttrs (versionAtLeast version "VERSION") { ... };
modules = modules ++ [ modules =
modules
++ [
./options ./options
./configuration.nix ./configuration.nix
#!! Avoid globally importing modules that are not guarded by .enable #!! Avoid globally importing modules that are not guarded by .enable
# https://github.com/NixOS/nixpkgs/issues/137168 # https://github.com/NixOS/nixpkgs/issues/137168
( (
{ config, inputs, ... }:
{ {
config,
inputs,
...
}: {
imports = [ imports = [
inputs."aagl-gtk-on-nix-${branch}".nixosModules.default inputs."aagl-gtk-on-nix-${branch}".nixosModules.default
inputs."home-manager-${branch}".nixosModules.home-manager inputs."home-manager-${branch}".nixosModules.home-manager
@ -155,39 +146,16 @@
#?? system = branch "ARCHITECTURE" [ MODULES ] #?? system = branch "ARCHITECTURE" [ MODULES ]
stable = arch: modules: common "stable" "${arch}-linux" modules; stable = arch: modules: common "stable" "${arch}-linux" modules;
unstable = arch: modules: common "unstable" "${arch}-linux" modules; unstable = arch: modules: common "unstable" "${arch}-linux" modules;
in in {
{
### Stable ### Stable
myarm = stable "aarch64" [ myarm = stable "aarch64" [./profiles/server ./machines/myarm];
./profiles/server myne = stable "x86_64" [./profiles/server ./machines/myne];
./machines/myarm mypi3 = stable "aarch64" [./profiles/sbc ./machines/mypi3];
];
myne = stable "x86_64" [
./profiles/server
./machines/myne
];
mypi3 = stable "aarch64" [
./profiles/sbc
./machines/mypi3
];
### Unstable ### Unstable
myeck = unstable "x86_64" [ myeck = unstable "x86_64" [./profiles/console ./machines/myeck];
./profiles/console mynix = unstable "x86_64" [./profiles/desktop ./machines/mynix];
./machines/myeck myork = unstable "x86_64" [./profiles/laptop ./machines/myork];
];
mynix = unstable "x86_64" [
./profiles/desktop
./machines/mynix
];
myork = unstable "x86_64" [
./profiles/laptop
./machines/myork
];
}; };
}; };
} }

View file

@ -7,9 +7,7 @@
pkgs, pkgs,
modulesPath, modulesPath,
... ...
}: }: {
{
imports = [(modulesPath + "/profiles/qemu-guest.nix")]; imports = [(modulesPath + "/profiles/qemu-guest.nix")];
boot.initrd.availableKernelModules = [ boot.initrd.availableKernelModules = [

View file

@ -7,9 +7,7 @@
pkgs, pkgs,
modulesPath, modulesPath,
... ...
}: }: {
{
imports = [(modulesPath + "/installer/scan/not-detected.nix")]; imports = [(modulesPath + "/installer/scan/not-detected.nix")];
boot.initrd.availableKernelModules = [ boot.initrd.availableKernelModules = [

View file

@ -7,9 +7,7 @@
pkgs, pkgs,
modulesPath, modulesPath,
... ...
}: }: {
{
imports = [(modulesPath + "/profiles/qemu-guest.nix")]; imports = [(modulesPath + "/profiles/qemu-guest.nix")];
boot.initrd.availableKernelModules = [ boot.initrd.availableKernelModules = [

View file

@ -7,9 +7,7 @@
pkgs, pkgs,
modulesPath, modulesPath,
... ...
}: }: {
{
imports = [(modulesPath + "/installer/scan/not-detected.nix")]; imports = [(modulesPath + "/installer/scan/not-detected.nix")];
boot.initrd.availableKernelModules = [ boot.initrd.availableKernelModules = [

View file

@ -4,12 +4,9 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: let
let
brightnessctl = "${pkgs.brightnessctl}/bin/brightnessctl"; brightnessctl = "${pkgs.brightnessctl}/bin/brightnessctl";
in in {
{
imports = [ imports = [
inputs.nixos-hardware.nixosModules.framework-13-7040-amd inputs.nixos-hardware.nixosModules.framework-13-7040-amd

View file

@ -7,9 +7,7 @@
pkgs, pkgs,
modulesPath, modulesPath,
... ...
}: }: {
{
imports = [(modulesPath + "/installer/scan/not-detected.nix")]; imports = [(modulesPath + "/installer/scan/not-detected.nix")];
boot.initrd.availableKernelModules = [ boot.initrd.availableKernelModules = [

View file

@ -7,9 +7,7 @@
pkgs, pkgs,
modulesPath, modulesPath,
... ...
}: }: {
{
imports = [(modulesPath + "/installer/scan/not-detected.nix")]; imports = [(modulesPath + "/installer/scan/not-detected.nix")];
boot.initrd.availableKernelModules = []; boot.initrd.availableKernelModules = [];

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom;
in {
options.custom = { options.custom = {
### Profiles ### Profiles
default = mkOption {default = true;}; default = mkOption {default = true;};

View file

@ -1,7 +1,8 @@
{ config, lib, ... }:
with lib;
{ {
config,
lib,
...
}:
with lib; {
config.custom.desktops.hyprland.enable = config.custom.full; config.custom.desktops.hyprland.enable = config.custom.full;
} }

View file

@ -4,13 +4,9 @@
pkgs, pkgs,
... ...
}: }:
with lib; let
with lib;
let
cfg = config.custom.desktops.gnome; cfg = config.custom.desktops.gnome;
in in {
{
options.custom.desktops.gnome = { options.custom.desktops.gnome = {
enable = mkOption {default = false;}; enable = mkOption {default = false;};
gdm = mkOption {default = true;}; gdm = mkOption {default = true;};

View file

@ -5,27 +5,17 @@
pkgs, pkgs,
... ...
}: }:
with lib; let
with lib;
let
clipse = "${pkgs.clipse}/bin/clipse"; clipse = "${pkgs.clipse}/bin/clipse";
codium = "${ codium = "${config.home-manager.users.${config.custom.username}.programs.vscode.package}/bin/codium";
config.home-manager.users.${config.custom.username}.programs.vscode.package firefox-esr = "${config.home-manager.users.${config.custom.username}.programs.firefox.finalPackage}/bin/firefox-esr";
}/bin/codium";
firefox-esr = "${
config.home-manager.users.${config.custom.username}.programs.firefox.finalPackage
}/bin/firefox-esr";
gnome-text-editor = "${pkgs.gnome-text-editor}/bin/gnome-text-editor"; gnome-text-editor = "${pkgs.gnome-text-editor}/bin/gnome-text-editor";
hyprctl = "${pkgs.hyprland}/bin/hyprctl"; hyprctl = "${pkgs.hyprland}/bin/hyprctl";
hyprlock = "${ hyprlock = "${config.home-manager.users.${config.custom.username}.programs.hyprlock.package}/bin/hyprlock";
config.home-manager.users.${config.custom.username}.programs.hyprlock.package
}/bin/hyprlock";
hyprpicker = "${pkgs.hyprpicker}/bin/hyprpicker"; hyprpicker = "${pkgs.hyprpicker}/bin/hyprpicker";
jq = "${pkgs.jq}/bin/jq"; jq = "${pkgs.jq}/bin/jq";
kill = "${pkgs.procps}/bin/kill"; kill = "${pkgs.procps}/bin/kill";
kitty = "${config.home-manager.users.${config.custom.username}.programs.kitty.package}/bin/kitty"; kitty = "${config.home-manager.users.${config.custom.username}.programs.kitty.package}/bin/kitty";
libreoffice = "${config.custom.programs.libreoffice.package}/bin/libreoffice";
loginctl = "${pkgs.systemd}/bin/loginctl"; loginctl = "${pkgs.systemd}/bin/loginctl";
nautilus = "${pkgs.nautilus}/bin/nautilus"; nautilus = "${pkgs.nautilus}/bin/nautilus";
networkmanager_dmenu = "${pkgs.networkmanager_dmenu}/bin/networkmanager_dmenu"; networkmanager_dmenu = "${pkgs.networkmanager_dmenu}/bin/networkmanager_dmenu";
@ -35,6 +25,7 @@ let
playerctl = "${pkgs.playerctl}/bin/playerctl"; playerctl = "${pkgs.playerctl}/bin/playerctl";
rofi-rbw = "${pkgs.rofi-rbw}/bin/rofi-rbw"; rofi-rbw = "${pkgs.rofi-rbw}/bin/rofi-rbw";
sleep = "${pkgs.coreutils}/bin/sleep"; sleep = "${pkgs.coreutils}/bin/sleep";
steam = "${config.programs.steam.package}/bin/steam";
swayosd-client = "${pkgs.swayosd}/bin/swayosd-client"; swayosd-client = "${pkgs.swayosd}/bin/swayosd-client";
systemctl = "${pkgs.systemd}/bin/systemctl"; systemctl = "${pkgs.systemd}/bin/systemctl";
virt-manager = "${config.programs.virt-manager.package}/bin/virt-manager"; virt-manager = "${config.programs.virt-manager.package}/bin/virt-manager";
@ -42,214 +33,206 @@ let
wofi = "${config.home-manager.users.${config.custom.username}.programs.wofi.package}/bin/wofi"; wofi = "${config.home-manager.users.${config.custom.username}.programs.wofi.package}/bin/wofi";
cfg = config.custom.desktops.hyprland.binds; cfg = config.custom.desktops.hyprland.binds;
in in {
{
options.custom.desktops.hyprland.binds.enable = mkOption {default = false;}; options.custom.desktops.hyprland.binds.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {
wayland.windowManager.hyprland.settings = { wayland.windowManager.hyprland.settings = let
# Reverse mods and key for alphabetical sorting
#?? key <"KEY"> <"MODS"|null> <"DISPATCHER"> <"PARAMS"|null>
key = key: mods: dispatcher: params: "${
if (isNull mods)
then ""
else mods
}, ${key}, ${dispatcher}${
if (isNull params)
then ""
else ", ${params}"
}";
in {
# https://wiki.hyprland.org/Configuring/Binds # https://wiki.hyprland.org/Configuring/Binds
#?? bind = MODS, KEY, DISPATCHER, [PARAMS] #?? bind = MODS, KEY, DISPATCHER, [PARAMS]
#?? wev #?? wev
binds = {
allow_workspace_cycles = true;
disable_keybind_grabbing = true;
scroll_event_delay = 0;
};
# Lockscreen binds # Lockscreen binds
bindl = [ bindl = [
### System (key "Delete" "Ctrl" "exec" "${hyprctl} reload")
"CTRL, Delete, exec, ${hyprctl} reload" (key "Delete" "Ctrl+Alt" "exec" "${loginctl} terminate-session ''")
"CTRL+ALT, Delete, exec, ${loginctl} terminate-session ''" (key "Delete" "Super" "exec" "inhibit")
"SUPER, L, exec, ${hyprlock} --immediate & ${sleep} 1 && ${hyprctl} dispatch dpms off" (key "L" "Super" "exec" "${hyprlock} --immediate & ${sleep} 1 && ${hyprctl} dispatch dpms off")
# Laptop lid switches # Laptop lid switches
# https://wiki.hyprland.org/Configuring/Binds/#switches # https://wiki.hyprland.org/Configuring/Binds/#switches
#?? hyprctl devices #?? hyprctl devices
", switch:on:Lid Switch, dpms, off" # Close (key "switch:off:Lid Switch" null "dpms" "on") # Open
", switch:off:Lid Switch, dpms, on" # Open (key "switch:on:Lid Switch" null "dpms" "off") # Close
### Scripts
"SUPER, Delete, exec, inhibit"
]; ];
# Mouse binds # Mouse binds
bindm = [ bindm = [
"SUPER, mouse:272, movewindow" # LMB (key "mouse:272" "Super" "movewindow" null) # LMB
"SUPER, mouse:273, resizewindow" # RMB (key "mouse:273" "Super" "resizewindow" null) # RMB
]; ];
# Repeat binds # Repeat binds
binde = [ binde = [
# Media keys # Media keys
# https://github.com/xkbcommon/libxkbcommon/blob/master/include/xkbcommon/xkbcommon-keysyms.h # https://github.com/xkbcommon/libxkbcommon/blob/master/include/xkbcommon/xkbcommon-keysyms.h
", XF86AudioMute, exec, ${swayosd-client} --output-volume mute-toggle" (key "XF86AudioMute" null "exec" "${swayosd-client} --output-volume mute-toggle") # F1
", XF86AudioLowerVolume, exec, ${swayosd-client} --output-volume lower" (key "XF86AudioLowerVolume" null "exec" "${swayosd-client} --output-volume lower") # F2
", XF86AudioRaiseVolume, exec, ${swayosd-client} --output-volume raise" (key "XF86AudioRaiseVolume" null "exec" "${swayosd-client} --output-volume raise") # F3
", XF86AudioPlay, exec, ${playerctl} play-pause" (key "XF86AudioPrev" null "exec" "${playerctl} previous") # F4
", XF86AudioPrev, exec, ${playerctl} previous" (key "XF86AudioPlay" null "exec" "${playerctl} play-pause") # F5
", XF86AudioNext, exec, ${playerctl} next" (key "XF86AudioNext" null "exec" "${playerctl} next") # F6
", XF86MonBrightnessDown, exec, ${swayosd-client} --brightness lower" (key "XF86MonBrightnessDown" null "exec" "${swayosd-client} --brightness lower") # F7
", XF86MonBrightnessUp, exec, ${swayosd-client} --brightness raise" (key "XF86MonBrightnessUp" null "exec" "${swayosd-client} --brightness raise") # F8
(key "XF86AudioMedia" null "exec" "${notify-send} test") # F12
# TODO: Unused media key
#// ", XF86AudioMedia, exec, null"
]; ];
# Release binds # Release binds
bindr = [ bindr = [
### Layouts (key "Alt_L" "Super+Alt" "togglespecialworkspace" "wallpaper")
"SUPER+CTRL, Control_L, layoutmsg, swapwithmaster master" (key "Control_L" "Super+Ctrl" "layoutmsg" "swapwithmaster master")
"SUPER+SHIFT+CTRL, Control_L, layoutmsg, addmaster" (key "Control_L" "Super+Ctrl+Alt+Shift" "layoutmsg" "removemaster")
"SUPER+SHIFT+CTRL+ALT, Control_L, layoutmsg, removemaster" (key "Control_L" "Super+Ctrl+Shift" "layoutmsg" "addmaster")
(key "Shift_L" "Super+Shift" "workspace" "previous")
### Workspaces (key "Super_L" "Super" "exec" "${pkill} wofi || ${wofi} --show drun")
"SUPER+SHIFT, Shift_L, workspace, previous" (key "Super_L" "Super+Alt" "exec" "${pkill} wofi || ${rofi-rbw}")
(key "Super_L" "Super+Ctrl" "exec" "${pkill} wofi || calc")
# Special workspaces (key "Super_L" "Super+Ctrl+Shift" "exec" "${pkill} wofi || ${networkmanager_dmenu}")
"SUPER, Super_L, togglespecialworkspace, scratchpad" (key "Super_L" "Super+Shift" "exec" "${pkill} wofi || ${wofi} --show run")
"SUPER+SHIFT, Super_L, movetoworkspacesilent, special:scratchpad"
"SUPER+ALT, Alt_L, togglespecialworkspace, wallpaper"
]; ];
# Regular binds # Regular binds
bind = [ bind = [
### Scripts (key "mouse:274" "Super" "layoutmsg" "swapwithmaster master")
", Print, exec, screenshot" (key "mouse:274" "Super+Shift" "layoutmsg" "addmaster")
"SHIFT, Print, exec, screenshot -d" (key "mouse:274" "Super+Ctrl+Shift" "layoutmsg" "removemaster")
"SUPER, Print, exec, screenshot -e"
"SUPER+SHIFT, Print, exec, screenshot -ed"
"SUPER+SHIFT, Delete, exec, vrr"
"SUPER, Minus, exec, audio"
"SUPER, Equal, exec, audio Normalizer"
"SUPER+SHIFT, W, exec, vm -x ${if config.custom.hidpi then "/scale:140 +f" else ""}"
"SUPER+SHIFT+CTRL, W, exec, vm ${virt-manager} --connect qemu:///system --show-domain-console myndows"
"SUPER+SHIFT+CTRL, Q, exec, close" # Quit all windows
# BUG: Freezes window when toggled (key "Backslash" "Super" "layoutmsg" "orientationcenter")
# https://github.com/hyprwm/Hyprland/issues/7609 (key "Backslash" "Super+Shift" "splitratio" "exact 0.5") # Reset layout ratio
"CTRL, Space, exec, toggle dropdown special:dropdown ${kitty} --app-id dropdown --override font_size=12" (key "Backspace" "Super" "changegroupactive" "f")
(key "Backspace" "Super+Ctrl" "togglegroup" null)
"CTRL+SHIFT, Space, exec, toggle pip special:pip" (key "Backspace" "Super+Ctrl+Shift" "lockactivegroup" "toggle")
(key "Backspace" "Super+Shift" "changegroupactive" "b")
(key "Bracketleft" "Super" "layoutmsg" "orientationprev")
(key "Bracketleft" "Super+Shift" "splitratio" "-0.1")
(key "Bracketright" "Super" "layoutmsg" "orientationnext")
(key "Bracketright" "Super+Shift" "splitratio" "+0.1")
# TODO: Toggle trackball hand # TODO: Toggle trackball hand
#// "SUPER, Delete, exec, left" #// (key "Delete" "Super" "exec" "left")
### Applications (key "Delete" "Super+Shift" "exec" "vrr")
"SUPER, B, exec, [tag +browser] ${firefox-esr}" (key "Down" "Super" "movewindoworgroup" "d")
"SUPER, C, exec, ${codium}" (key "Equal" "Super" "exec" "audio Normalizer")
"SUPER, E, exec, ${gnome-text-editor}" (key "Escape" "Super" "togglefloating" null)
"SUPER, F, exec, ${nautilus}" (key "Escape" "Super+Alt" "exec" "lifx state --color red")
"SUPER, K, exec, ${obsidian}" (key "Escape" "Super+Shift" "centerwindow" null)
"SUPER, O, exec, ${libreoffice}" (key "Left" "Super" "movewindoworgroup" "l")
"SUPER, P, exec, ${hyprpicker} --autocopy" (key "Minus" "Super" "exec" "audio")
"SUPER+SHIFT, P, exec, ${hyprpicker} --autocopy --format rgb" (key "Print" "Shift" "exec" "screenshot -d")
"SUPER+CTRL, T, exec, ${kitty}" (key "Print" "Super" "exec" "screenshot -e")
"SUPER+SHIFT+CTRL, T, exec, ${pkill} kitty" (key "Print" "Super+Shift" "exec" "screenshot -ed")
"SUPER, V, exec, ${kitty} --app-id clipboard --override font_size=12 ${clipse}" (key "Print" null "exec" "screenshot")
"SUPER+SHIFT, V, exec, ${clipse} -clear && ${notify-send} clipse 'Clipboard cleared' --urgency low" (key "Return" "Super" "fullscreen" "1") # Maximize
"SUPER, Space, exec, ${pkill} wofi || ${wofi} --show drun" (key "Return" "Super+Shift" "fullscreen" "0") # Fullscreen
"SUPER+SHIFT, Space, exec, ${pkill} wofi || ${wofi} --show run" (key "Right" "Super" "movewindoworgroup" "r")
"SUPER+CTRL, Space, exec, ${pkill} wofi || calc" (key "Space" "Ctrl" "exec" (concatStringsSep " " [
"SUPER+ALT, Space, exec, ${pkill} wofi || ${rofi-rbw}" "toggle"
"SUPER+SHIFT+CTRL, Space, exec, ${pkill} wofi || ${networkmanager_dmenu}" "--focus"
"--type class"
"--expression '^dropdown$'"
"--workspace special:dropdown"
"--"
"${kitty} --app-id dropdown --override font_size=12"
]))
(key "Space" "Ctrl+Alt" "exec" "lifx toggle")
(key "Space" "Ctrl+Shift" "exec" (concatStringsSep " " [
"toggle"
"--type title"
"--expression '^Picture.in.[Pp]icture$'"
"--workspace special:pip"
]))
(key "Space" "Super" "togglespecialworkspace" "scratchpad")
(key "Space" "Super+Ctrl" "movetoworkspacesilent" "special:scratchpad")
(key "Tab" "Super" "cyclenext" "tiled")
(key "Tab" "Super+Shift" "alterzorder" "top")
(key "Tab" "Super+Shift" "cyclenext" "floating")
(key "Up" "Super" "movewindoworgroup" "u")
# Kill applications (key "0" "Super" "workspace" "10")
"SUPER, Q, killactive" (key "0" "Super+Ctrl" "movetoworkspacesilent" "10")
"SUPER+SHIFT, Q, exec, ${kill} -9 $(${hyprctl} -j activewindow | ${jq} .pid)" (key "1" "Ctrl+Alt" "exec" "lifx state --brightness 0.01")
"SUPER+SHIFT, A, exec, ${waydroid} session stop" (key "1" "Super" "workspace" "1")
"SUPER+SHIFT, S, exec, ${pkill} steam" (key "1" "Super+Alt" "exec" "lifx state --kelvin 1500")
"SUPER+SHIFT+CTRL, G, exec, ${pkill} gamescope" (key "1" "Super+Ctrl" "movetoworkspacesilent" "1")
(key "2" "Ctrl+Alt" "exec" "lifx state --brightness 0.25")
# LIFX (key "2" "Super" "workspace" "2")
"SUPER+ALT, Escape, exec, lifx state --color red" (key "2" "Super+Alt" "exec" "lifx state --kelvin 2500")
"SUPER+ALT, 1, exec, lifx state --kelvin 1500" (key "2" "Super+Ctrl" "movetoworkspacesilent" "2")
"SUPER+ALT, 2, exec, lifx state --kelvin 2500" (key "3" "Ctrl+Alt" "exec" "lifx state --brightness 0.50")
"SUPER+ALT, 3, exec, lifx state --kelvin 3000" (key "3" "Super" "workspace" "3")
"SUPER+ALT, 4, exec, lifx state --kelvin 4000" (key "3" "Super+Alt" "exec" "lifx state --kelvin 3000")
"SUPER+ALT, 5, exec, lifx state --kelvin 5000" (key "3" "Super+Ctrl" "movetoworkspacesilent" "3")
"CTRL+ALT, 1, exec, lifx state --brightness 0.01" (key "4" "Ctrl+Alt" "exec" "lifx state --brightness 0.75")
"CTRL+ALT, 2, exec, lifx state --brightness 0.25" (key "4" "Super" "workspace" "4")
"CTRL+ALT, 3, exec, lifx state --brightness 0.50" (key "4" "Super+Alt" "exec" "lifx state --kelvin 4000")
"CTRL+ALT, 4, exec, lifx state --brightness 0.75" (key "4" "Super+Ctrl" "movetoworkspacesilent" "4")
"CTRL+ALT, 5, exec, lifx state --brightness 1.00" (key "5" "Ctrl+Alt" "exec" "lifx state --brightness 1.00")
"CTRL+ALT, Space, exec, lifx toggle" (key "5" "Super" "workspace" "5")
(key "5" "Super+Alt" "exec" "lifx state --kelvin 5000")
### Windows (key "5" "Super+Ctrl" "movetoworkspacesilent" "5")
"SUPER, Escape, togglefloating" (key "6" "Super" "workspace" "6")
"SUPER+SHIFT, Escape, centerwindow" (key "6" "Super+Ctrl" "movetoworkspacesilent" "6")
"SUPER, Return, fullscreen, 1" # Maximize (key "7" "Super" "workspace" "7")
"SUPER+SHIFT, Return, fullscreen, 0" # Fullscreen (key "7" "Super+Ctrl" "movetoworkspacesilent" "7")
"SUPER, Tab, cyclenext, tiled" (key "8" "Super" "workspace" "8")
(key "8" "Super+Ctrl" "movetoworkspacesilent" "8")
# FIXME: Handle hover focus and zorder (key "9" "Super" "workspace" "9")
"SUPER+SHIFT, Tab, cyclenext, floating" (key "9" "Super+Ctrl" "movetoworkspacesilent" "9")
"SUPER+SHIFT, Tab, alterzorder, top" (key "A" "Ctrl+Alt" "exec" "${waydroid} session stop")
(key "A" "Super" "togglespecialworkspace" "android")
### Groups (key "A" "Super+Ctrl" "movetoworkspacesilent" "android")
"SUPER, Backspace, changegroupactive, f" (key "B" "Super" "exec" "[group new lock; tile] ${firefox-esr}")
"SUPER+SHIFT, Backspace, changegroupactive, b" (key "C" "Super" "exec" codium)
"SUPER+CTRL, Backspace, togglegroup" (key "E" "Super" "exec" gnome-text-editor)
"SUPER+SHIFT+CTRL, Backspace, lockactivegroup, toggle" (key "F" "Super" "exec" nautilus)
"SUPER, Up, movewindoworgroup, u" (key "G" "Super" "workspace" "name:game")
"SUPER, Down, movewindoworgroup, d" (key "G" "Super+Alt" "workspace" "name:gamescope")
"SUPER, Left, movewindoworgroup, l" (key "G" "Super+Ctrl" "movetoworkspacesilent" "name:game")
"SUPER, Right, movewindoworgroup, r" (key "G" "Super+Ctrl+Alt" "exec" "${pkill} gamescope")
(key "K" "Super" "exec" obsidian)
### Layouts (key "M" "Super" "togglespecialworkspace" "music")
"SUPER, mouse:274, layoutmsg, swapwithmaster master" (key "M" "Super+Ctrl" "movetoworkspacesilent" "music")
"SUPER+SHIFT, mouse:274, layoutmsg, addmaster" (key "O" "Super" "togglespecialworkspace" "office")
"SUPER+SHIFT+CTRL, mouse:274, layoutmsg, removemaster" (key "P" "Super" "exec" "${hyprpicker} --autocopy")
"SUPER, Bracketleft, layoutmsg, orientationprev" (key "P" "Super+Shift" "exec" "${hyprpicker} --autocopy --format rgb")
"SUPER, Bracketright, layoutmsg, orientationnext" (key "Q" "Ctrl+Alt" "exec" "${kill} -9 $(${hyprctl} -j activewindow | ${jq} .pid)")
"SUPER, Backslash, layoutmsg, orientationcenter" (key "Q" "Ctrl+Alt+Shift" "exec" "close") # Quit all windows
"SUPER+SHIFT, Backslash, splitratio, exact 0.5" # Reset layout ratio (key "Q" "Super" "killactive" null)
"SUPER+SHIFT, Bracketleft, splitratio, -0.1" (key "S" "Ctrl+Alt" "exec" "${pkill} steam")
"SUPER+SHIFT, Bracketright, splitratio, +0.1" (key "S" "Super" "togglespecialworkspace" "steam")
(key "S" "Super+Ctrl" "movetoworkspacesilent" "steam")
### Workspaces (key "S" "Super+Shift" "exec" steam)
"SUPER, 1, workspace, 1" (key "T" "Ctrl+Alt" "exec" "${pkill} kitty")
"SUPER+SHIFT, 1, movetoworkspacesilent, 1" (key "T" "Super" "togglespecialworkspace" "terminal")
"SUPER, 2, workspace, 2" (key "T" "Super+Ctrl" "movetoworkspacesilent" "terminal")
"SUPER+SHIFT, 2, movetoworkspacesilent, 2" (key "T" "Super+Shift" "exec" kitty)
"SUPER, 3, workspace, 3" (key "V" "Super" "exec" "${kitty} --app-id clipboard --override font_size=12 ${clipse}")
"SUPER+SHIFT, 3, movetoworkspacesilent, 3" (key "V" "Super+Shift" "exec" "${clipse} -clear && ${notify-send} clipse 'Clipboard cleared' --urgency low")
"SUPER, 4, workspace, 4" (key "W" "Super" "togglespecialworkspace" "vm")
"SUPER+SHIFT, 4, movetoworkspacesilent, 4" (key "W" "Super+Shift" "exec" "vm -x ${
"SUPER, 5, workspace, 5" if config.custom.hidpi
"SUPER+SHIFT, 5, movetoworkspacesilent, 5" then "/scale:140 +f"
"SUPER, 6, workspace, 6" else ""
"SUPER+SHIFT, 6, movetoworkspacesilent, 6" }")
"SUPER, 7, workspace, 7" (key "W" "Super+Ctrl" "movetoworkspacesilent" "vm")
"SUPER+SHIFT, 7, movetoworkspacesilent, 7" (key "W" "Super+Ctrl+Shift" "exec" "vm ${virt-manager} --show-domain-console myndows")
"SUPER, 8, workspace, 8" (key "X" "Super" "workspace" "+1")
"SUPER+SHIFT, 8, movetoworkspacesilent, 8" (key "X" "Super+Ctrl" "movetoworkspacesilent" "+1")
"SUPER, 9, workspace, 9" (key "Z" "Super" "workspace" "-1")
"SUPER+SHIFT, 9, movetoworkspacesilent, 9" (key "Z" "Super+Ctrl" "movetoworkspacesilent" "-1")
"SUPER, 0, workspace, 10"
"SUPER+SHIFT, 0, movetoworkspacesilent, 10"
"SUPER, Z, workspace, -1"
"SUPER+SHIFT, Z, movetoworkspacesilent, -1"
"SUPER, X, workspace, +1"
"SUPER+SHIFT, X, movetoworkspacesilent, +1"
# Named workspaces
"SUPER, G, workspace, name:game"
"SUPER+SHIFT, G, movetoworkspacesilent, name:game"
"SUPER+CTRL, G, workspace, name:gamescope"
# Special workspaces
"SUPER, A, togglespecialworkspace, android"
"SUPER+SHIFT, A, movetoworkspacesilent, android"
"SUPER, M, togglespecialworkspace, music"
"SUPER+SHIFT, M, movetoworkspacesilent, music"
"SUPER, S, togglespecialworkspace, steam"
"SUPER+SHIFT, S, movetoworkspacesilent, steam"
"SUPER, T, togglespecialworkspace, terminal"
"SUPER+SHIFT, T, movetoworkspacesilent, terminal"
"SUPER, W, togglespecialworkspace, vm"
"SUPER+SHIFT, W, movetoworkspacesilent, vm"
]; ];
}; };
}; };

View file

@ -4,13 +4,9 @@
pkgs, pkgs,
... ...
}: }:
with lib; let
with lib;
let
cfg = config.custom.desktops.hyprland; cfg = config.custom.desktops.hyprland;
in in {
{
options.custom.desktops.hyprland.enable = mkOption {default = false;}; options.custom.desktops.hyprland.enable = mkOption {default = false;};
config = mkIf cfg.enable { config = mkIf cfg.enable {

View file

@ -4,15 +4,11 @@
pkgs, pkgs,
... ...
}: }:
with lib; let
with lib;
let
hyprctl = "${pkgs.hyprland}/bin/hyprctl"; hyprctl = "${pkgs.hyprland}/bin/hyprctl";
cfg = config.custom.desktops.hyprland.plugins; cfg = config.custom.desktops.hyprland.plugins;
in in {
{
options.custom.desktops.hyprland.plugins.enable = mkOption {default = false;}; options.custom.desktops.hyprland.plugins.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {

View file

@ -4,21 +4,19 @@
pkgs, pkgs,
... ...
}: }:
with lib; let
with lib;
let
gamescope = "${config.programs.gamescope.package}/bin/gamescope"; gamescope = "${config.programs.gamescope.package}/bin/gamescope";
kitty = "${config.home-manager.users.${config.custom.username}.programs.kitty.package}/bin/kitty";
libreoffice = "${config.custom.programs.libreoffice.package}/bin/libreoffice";
loupe = "${pkgs.loupe}/bin/loupe"; loupe = "${pkgs.loupe}/bin/loupe";
pgrep = "${pkgs.procps}/bin/pgrep";
steam = "${config.programs.steam.package}/bin/steam"; steam = "${config.programs.steam.package}/bin/steam";
virt-manager = "${pkgs.virt-manager}/bin/virt-manager"; virt-manager = "${pkgs.virt-manager}/bin/virt-manager";
waydroid = "${pkgs.waydroid}/bin/waydroid"; waydroid = "${pkgs.waydroid}/bin/waydroid";
kitty = "${config.home-manager.users.${config.custom.username}.programs.kitty.package}/bin/kitty";
youtube-music = "${pkgs.youtube-music}/bin/youtube-music"; youtube-music = "${pkgs.youtube-music}/bin/youtube-music";
cfg = config.custom.desktops.hyprland.rules; cfg = config.custom.desktops.hyprland.rules;
in in {
{
options.custom.desktops.hyprland.rules.enable = mkOption {default = false;}; options.custom.desktops.hyprland.rules.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {
@ -30,51 +28,16 @@ in
"special:android, on-created-empty:${waydroid} app launch com.YoStarEN.Arknights" "special:android, on-created-empty:${waydroid} app launch com.YoStarEN.Arknights"
"special:music, on-created-empty:${youtube-music}" "special:music, on-created-empty:${youtube-music}"
"special:office, on-created-empty:${libreoffice}"
"special:steam, on-created-empty:${steam}" "special:steam, on-created-empty:${steam}"
"special:terminal, on-created-empty:${kitty}" "special:terminal, on-created-empty:${kitty}"
"special:vm, on-created-empty:${pgrep} -x vm || ${virt-manager}"
"special:wallpaper, on-created-empty:[tile] ${loupe} /tmp/wallpaper.png" "special:wallpaper, on-created-empty:[tile] ${loupe} /tmp/wallpaper.png"
]; ];
# https://wiki.hyprland.org/Configuring/Window-Rules # https://wiki.hyprland.org/Configuring/Window-Rules
#?? windowrulev2 = RULE, WINDOW #?? windowrulev2 = RULE, WINDOW
windowrulev2 = windowrulev2 = with config.custom; let
with config.custom;
let
# Return hypr-formatted string, converting booleans into 0/1
format =
field: expr:
"${field}:${
toString (
if expr == true then
1
else if expr == false then
0
else
expr
)
}";
# Generate hypr-formatted window rules
#?? merge <FIELD|{FIELDS}> <EXPRESSION> <RULES>
merge =
field: expr: rules:
map (
rule:
if builtins.isAttrs field then
"${rule}, ${lib.concatStringsSep ", " (lib.mapAttrsToList (f: e: format f e) field)}"
else
"${rule}, ${format field expr}"
) rules;
class = expr: rules: merge "class" "^${expr}$" rules;
floating = expr: rules: merge "floating" expr rules;
fullscreen = expr: rules: merge "fullscreen" expr rules;
pinned = expr: rules: merge "pinned" expr rules;
tag = expr: rules: merge "tag" expr rules;
title = expr: rules: merge "title" "^${expr}$" rules;
fields = fields: rules: merge fields null rules;
### Hardware-dependent rules ### Hardware-dependent rules
# Convert truncated float to string # Convert truncated float to string
tr = num: toString (builtins.floor num); tr = num: toString (builtins.floor num);
@ -91,7 +54,16 @@ in
dropdown = rec { dropdown = rec {
x = tr (width / scale / 2 - (toInt w) / 2); x = tr (width / scale / 2 - (toInt w) / 2);
y = tr (height / scale - (toInt h) - gap - border - padding); y = tr (height / scale - (toInt h) - gap - border - padding);
w = tr (width / scale * (if ultrawide then 0.5 else 1) - gap - gap / 2 + 1); w = tr (width
/ scale
* (
if ultrawide
then 0.5
else 1
)
- gap
- gap / 2
+ 1);
h = tr (height / scale * 0.2 * scale); h = tr (height / scale * 0.2 * scale);
}; };
@ -102,173 +74,146 @@ in
w = tr (width / scale * 0.25 - gap - gap + 1); w = tr (width / scale * 0.25 - gap - gap + 1);
h = tr ((toInt w) * 9 / 16); # 16:9 aspect ratio h = tr ((toInt w) * 9 / 16); # 16:9 aspect ratio
}; };
### Rules
# Return hypr-formatted string, converting booleans into 0/1
format = field: expr: "${field}:${
toString (
if expr == true
then 1
else if expr == false
then 0
else expr
)
}";
# Generate hypr-formatted window rules
#?? merge <FIELD|{FIELDS}> <EXPRESSION> <RULES>
merge = field: expr: rules:
map (
rule:
if builtins.isAttrs field
then "${rule}, ${lib.concatStringsSep ", " (lib.mapAttrsToList (f: e: format f e) field)}"
else "${rule}, ${format field expr}"
)
rules;
class = expr: rules: merge "class" "^${expr}$" rules;
floating = expr: rules: merge "floating" expr rules;
fullscreen = expr: rules: merge "fullscreen" expr rules;
pinned = expr: rules: merge "pinned" expr rules;
title = expr: rules: merge "title" "^${expr}$" rules;
fields = fields: rules: merge fields null rules;
### Pseudo-tags
# Wrap generated rules in Nix categories
tag = {
android = rules: [
(class "waydroid.*" rules)
];
clipboard = rules: [
(class "clipboard" rules)
];
dropdown = rules: [
(class "dropdown" rules)
];
editor = rules: [
(class "codium-url-handler" rules) # VSCode
(class "obsidian" (rules ++ ["group barred"]))
];
files = rules: [
(class "org\\.gnome\\.Nautilus" rules)
];
game = rules: [
(class "moe\\.launcher\\.the-honkers-railway-launcher" (rules ++ ["size 1280 730"])) # Honkai: Star Rail
(class "steam_app_.+" rules) # Proton
];
music = rules: [
(class "Spotify" rules)
(class "YouTube Music" rules)
(title "Spotify Premium" rules)
];
office = rules: [
(class "libreoffice.+" rules)
];
pip = rules: [
(title "Picture.in.[Pp]icture" rules)
];
social = rules: [
(class "cinny" rules)
(class "discord" rules)
(class "Element" rules)
(class "org\\.telegram\\.desktop" rules)
];
steam = rules: [
(class "SDL Application" rules) # Steam
(class "steam" rules)
];
terminal = rules: [
(class "foot" rules)
(class "kitty" rules)
(class "org\\.wezfurlong\\.wezterm" rules)
];
vm = rules: [
(class "(sdl-|wl|x)freerdp" (rules ++ ["nomaxsize" "tile"]))
(class "virt-manager" rules)
];
wine = rules: [
(class ".*\\.(exe|x86_64)" rules) # Wine
];
};
in in
flatten [ flatten [
### Defaults ### Defaults
(class ".*" [ (class ".*" ["float" "suppressevent maximize" "syncfullscreen"])
"center" (floating true ["bordercolor rgb(073642)"])
"float"
"suppressevent maximize"
"syncfullscreen"
])
(floating true [
"bordercolor rgb(073642)"
"workspace special:scratchpad"
])
(fullscreen true ["idleinhibit focus"]) (fullscreen true ["idleinhibit focus"])
(pinned true ["bordercolor rgb(073642) rgb(073642)"]) (pinned true ["bordercolor rgb(073642) rgb(073642)"])
# TODO: Convert to nix variables instead of tags (tag.android ["tile" "workspace special:android"])
### Tags (tag.clipboard ["move ${clipboard.x} ${clipboard.y}" "pin" "size ${clipboard.w} ${clipboard.h}" "stayfocused"])
(tag "android" [ (tag.dropdown ["move ${dropdown.x} ${dropdown.y}" "pin" "size ${dropdown.w} ${dropdown.h}"])
"tile" (tag.editor ["group invade" "tile"])
"workspace special:android" (tag.files ["size 1000 625"])
]) (tag.game ["group barred" "idleinhibit always" "noborder" "noshadow" "renderunfocused" "workspace name:game"])
(tag "browser" [ (tag.music ["tile" "workspace special:music"])
"group new lock" (tag.office ["tile" "workspace special:office"])
"tile" (tag.pip ["keepaspectratio" "move ${pip.x} ${pip.y}" "pin" "size ${pip.w} ${pip.h}"])
"workspace unset" (tag.social ["group" "tile"])
]) (tag.steam ["workspace special:steam"])
(tag "clipboard" [ (tag.terminal ["tile"])
"move ${clipboard.x} ${clipboard.y}" (tag.vm ["workspace special:vm"])
"pin" (tag.wine ["noborder" "noshadow"])
"size ${clipboard.w} ${clipboard.h}"
"stayfocused"
])
(tag "dropdown" [
"move ${dropdown.x} ${dropdown.y}"
"pin"
"size ${dropdown.w} ${dropdown.h}"
"workspace special:dropdown"
])
(tag "editor" [
"group invade"
"tile"
"workspace unset"
])
(tag "files" [
"size 1000 625"
])
(tag "game" [
"group barred"
"idleinhibit always"
"noborder"
"noshadow"
"renderunfocused"
"workspace name:game"
])
(tag "music" [
"tile"
"workspace special:music"
])
(tag "pip" [
"keepaspectratio"
"move ${pip.x} ${pip.y}"
"pin"
"size ${pip.w} ${pip.h}"
])
(tag "social" [
"group"
"tile"
"workspace unset"
])
(tag "steam" [ "workspace special:steam" ])
(tag "terminal" [
"tile"
"workspace unset"
])
(tag "vm" [ "workspace special:vm" ])
(tag "wine" [
"noborder"
"noshadow"
])
### Applications
(class ".*\\.(exe|x86_64)" [ "tag +wine" ]) # Wine
(class "(sdl-|wl|x)freerdp" [
"nomaxsize"
"tag +vm"
"tile"
])
(class "cinny" [ "tag +social" ])
(class "clipboard" [ "tag +clipboard" ])
(class "codium-url-handler" [ "tag +editor" ]) # VSCode
(class "discord" [ "tag +social" ])
(class "dropdown" [ "tag +dropdown" ])
(class "Element" [ "tag +social" ])
(class "foot" [ "tag +terminal" ])
(class "kitty" [ "tag +terminal" ])
(class "libreoffice.+" [
"tile"
"workspace unset"
])
(class "moe\\.launcher\\.the-honkers-railway-launcher" [
"size 1280 730"
"tag +game"
])
(class "obsidian" [
"group barred"
"tag +editor"
])
(class "org\\.gnome\\.Nautilus" [ "tag +files" ])
(class "org\\.telegram\\.desktop" [ "tag +social" ])
(class "org\\.wezfurlong\\.wezterm" [ "tag +terminal" ])
(class "SDL Application" [ "tag +steam" ]) # Steam
(class "Spotify" [ "tag +music" ])
(class "steam_app_1473350" [ "workspace 0" ]) # (the) Gnorp Apologue
(class "steam" [ "tag +steam" ])
(class "steam_app_.+" [ "tag +game" ]) # Proton
(class "Tap Wizard 2.x86_64" [ "workspace 0" ])
(class "virt-manager" [ "tag +vm" ])
(class "waydroid.*" [ "tag +android" ])
(class "YouTube Music" [ "tag +music" ])
(title "Picture.in.[Pp]icture" [ "tag +pip" ])
(title "Spotify Premium" [ "tag +music" ])
### Overrides ### Overrides
#!! Expressions are not wrapped in ^$ (class "steam_app_1473350" ["workspace 0"]) # (the) Gnorp Apologue
(fields (class "Tap Wizard 2.x86_64" ["workspace 0"])
{
class = "^lutris$";
title = "^Lutris$";
}
[
"center"
"size 1000 500"
]
)
(fields {
tag = "steam";
title = "^notificationtoasts$";
} [ "workspace unset" ])
(fields {
tag = "steam";
title = "^Steam$";
} [ "tile" ])
(fields #!! Expressions are not wrapped in ^$
{ (fields {
class = "^com\\.github\\.wwmm\\.easyeffects$"; class = "^com\\.github\\.wwmm\\.easyeffects$";
title = "^Easy Effects$"; title = "^Easy Effects$"; # Main window
} } ["size 50% 50%"])
[ (fields {
"size 50% 50%"
]
)
(fields
{
class = "^discord$"; class = "^discord$";
title = "^Discord Updater$"; title = "^Discord Updater$"; # Update dialog
} } ["float" "nofocus"])
[ (fields {
"float" class = "^lutris$";
"nofocus" title = "^Lutris$"; # Main window
] } ["center" "size 1000 500"])
) (fields {
class = "^steam$";
title = "^notificationtoasts$"; # Steam notifications
} [])
(fields {
class = "^steam$";
title = "^Steam$"; # Main window
} ["tile"])
(fields { (fields {
class = "^virt-manager$"; class = "^virt-manager$";
title = "^.+on QEMU/KVM$"; title = "^.+on QEMU/KVM$"; # VM window
} ["tile"]) } ["tile"])
]; ];
}; };

View file

@ -4,10 +4,7 @@
pkgs, pkgs,
... ...
}: }:
with lib; let
with lib;
let
clipse = "${pkgs.clipse}/bin/clipse"; clipse = "${pkgs.clipse}/bin/clipse";
firefox-esr = "${ firefox-esr = "${
config.home-manager.users.${config.custom.username}.programs.firefox.finalPackage config.home-manager.users.${config.custom.username}.programs.firefox.finalPackage
@ -22,8 +19,7 @@ let
}/bin/waybar"; }/bin/waybar";
cfg = config.custom.desktops.hyprland.settings; cfg = config.custom.desktops.hyprland.settings;
in in {
{
options.custom.desktops.hyprland.settings.enable = mkOption {default = false;}; options.custom.desktops.hyprland.settings.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {
@ -51,12 +47,14 @@ in
#?? envd = VARIABLE, VALUE #?? envd = VARIABLE, VALUE
# HACK: Mapped home-manager variables to envd in lieu of upstream fix # HACK: Mapped home-manager variables to envd in lieu of upstream fix
# https://github.com/nix-community/home-manager/issues/2659 # https://github.com/nix-community/home-manager/issues/2659
envd = envd = with builtins;
with builtins; attrValues
attrValues ( (
mapAttrs ( mapAttrs
(
name: value: "${name}, ${toString value}" name: value: "${name}, ${toString value}"
) config.home-manager.users.${config.custom.username}.home.sessionVariables )
config.home-manager.users.${config.custom.username}.home.sessionVariables
) )
++ [ ++ [
"EDITOR, gnome-text-editor" "EDITOR, gnome-text-editor"
@ -66,7 +64,8 @@ in
#// exec = [ ]; #// exec = [ ];
# https://wiki.hyprland.org/Configuring/Keywords/#executing # https://wiki.hyprland.org/Configuring/Keywords/#executing
exec-once = [ exec-once =
[
"${rm} ~/.config/qalculate/qalc.dmenu.history" # Clear calc history "${rm} ~/.config/qalculate/qalc.dmenu.history" # Clear calc history
"${clipse} -clear" # Clear clipboard history "${clipse} -clear" # Clear clipboard history
"${clipse} -listen" # Monitor clipboard "${clipse} -listen" # Monitor clipboard
@ -76,8 +75,9 @@ in
# https://github.com/Alexays/Waybar/issues/2882 # https://github.com/Alexays/Waybar/issues/2882
"${sleep} 2 && ${systemctl} --user restart waybar" "${sleep} 2 && ${systemctl} --user restart waybar"
"[tag +browser] ${firefox-esr}" "[group new lock; tile] ${firefox-esr}"
] ++ optionals config.custom.wallpaper [ "wallpaper" ]; ]
++ optionals config.custom.wallpaper ["wallpaper"];
# https://wiki.hyprland.org/Configuring/Variables/#xwayland # https://wiki.hyprland.org/Configuring/Variables/#xwayland
xwayland = { xwayland = {
@ -112,9 +112,9 @@ in
#?? animation = NAME, ONOFF, SPEED, CURVE, [STYLE] #?? animation = NAME, ONOFF, SPEED, CURVE, [STYLE]
animation = [ animation = [
"global, 1, 5, default" "global, 1, 5, default"
"windows, 1, 5, default, slide"
"layers, 1, 5, default, slide"
"specialWorkspace, 1, 5, default, fade" "specialWorkspace, 1, 5, default, fade"
"windows, 1, 5, default, slide"
"layers, 0"
]; ];
# https://wiki.hyprland.org/Configuring/Variables/#decoration # https://wiki.hyprland.org/Configuring/Variables/#decoration
@ -142,7 +142,10 @@ in
"col.inactive" = "rgba(6c71c440)"; "col.inactive" = "rgba(6c71c440)";
"col.locked_active" = "rgb(d33682)"; "col.locked_active" = "rgb(d33682)";
"col.locked_inactive" = "rgba(d3368240)"; "col.locked_inactive" = "rgba(d3368240)";
font_size = if config.custom.hidpi then 16 else 10; font_size =
if config.custom.hidpi
then 16
else 10;
height = 5; height = 5;
render_titles = false; render_titles = false;
text_color = "rgb(93a1a1)"; text_color = "rgb(93a1a1)";
@ -166,13 +169,22 @@ in
#// vrr = 2; # VRR in fullscreen #// vrr = 2; # VRR in fullscreen
}; };
# https://wiki.hyprland.org/Configuring/Variables/#binds
binds = {
allow_workspace_cycles = true;
disable_keybind_grabbing = true;
ignore_group_lock = true;
scroll_event_delay = 0;
};
# https://wiki.hyprland.org/Configuring/Variables/#input # https://wiki.hyprland.org/Configuring/Variables/#input
input = { input = {
accel_profile = "flat"; accel_profile = "flat";
float_switch_override_focus = 0; # Disable float to tile hover focus float_switch_override_focus = 0; # Disable float to tile hover focus
focus_on_close = 1; # Focus window under mouse
follow_mouse = 1; # Hover focus follow_mouse = 1; # Hover focus
mouse_refocus = false; mouse_refocus = false;
repeat_delay = 400; repeat_delay = 300;
repeat_rate = 40; repeat_rate = 40;
sensitivity = 0.5; sensitivity = 0.5;
#// scroll_factor = 0.75; #// scroll_factor = 0.75;
@ -206,6 +218,9 @@ in
# https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs # https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs
#?? device = { name = NAME ... } #?? device = { name = NAME ... }
# https://wiki.hyprland.org/Configuring/Variables/#custom-accel-profiles
# https://wayland.freedesktop.org/libinput/doc/latest/pointer-acceleration.html#the-custom-acceleration-profile
#?? custom <STEP> <POINTS...>
# TODO: Combine same devices # TODO: Combine same devices
# FIXME: Hotplugging may result in different id # FIXME: Hotplugging may result in different id
device = [ device = [
@ -229,8 +244,8 @@ in
{ {
name = "logitech-m570"; name = "logitech-m570";
accel_profile = "adaptive"; accel_profile = "custom 1 0 1 3";
sensitivity = -0.9; sensitivity = -0.1;
} }
{ {

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.desktops.kde;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.desktops.kde;
in {
options.custom.desktops.kde.enable = mkOption {default = false;}; options.custom.desktops.kde.enable = mkOption {default = false;};
config = mkIf cfg.enable {services.desktopManager.plasma6.enable = true;}; config = mkIf cfg.enable {services.desktopManager.plasma6.enable = true;};

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.files.agenix;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.files.agenix;
in {
# https://wiki.nixos.org/wiki/Agenix # https://wiki.nixos.org/wiki/Agenix
# https://github.com/ryantm/agenix # https://github.com/ryantm/agenix
options.custom.files.agenix.enable = mkOption {default = false;}; options.custom.files.agenix.enable = mkOption {default = false;};

View file

@ -1,8 +1,9 @@
{ config, lib, ... }:
with lib;
{ {
config,
lib,
...
}:
with lib; {
config.custom.files = mkIf config.custom.default { config.custom.files = mkIf config.custom.default {
agenix.enable = true; agenix.enable = true;
dev.enable = true; dev.enable = true;

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.files.dev;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.files.dev;
in {
options.custom.files.dev.enable = mkOption {default = false;}; options.custom.files.dev.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.files.mnt;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.files.mnt;
in {
options.custom.files.mnt.enable = mkOption {default = false;}; options.custom.files.mnt.enable = mkOption {default = false;};
config = mkIf cfg.enable { config = mkIf cfg.enable {

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.files.nixos;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.files.nixos;
in {
options.custom.files.nixos.enable = mkOption {default = false;}; options.custom.files.nixos.enable = mkOption {default = false;};
config = mkIf cfg.enable { config = mkIf cfg.enable {

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.adb;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.adb;
in {
options.custom.programs.adb.enable = mkOption {default = false;}; options.custom.programs.adb.enable = mkOption {default = false;};
config = mkIf cfg.enable { config = mkIf cfg.enable {

View file

@ -4,13 +4,9 @@
lib, lib,
... ...
}: }:
with lib; let
with lib;
let
cfg = config.custom.programs.ags; cfg = config.custom.programs.ags;
in in {
{
options.custom.programs.ags.enable = mkOption {default = false;}; options.custom.programs.ags.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.alacritty;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.alacritty;
in {
options.custom.programs.alacritty.enable = mkOption {default = false;}; options.custom.programs.alacritty.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.anime-game-launcher;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.anime-game-launcher;
in {
options.custom.programs.anime-game-launcher.enable = mkOption {default = false;}; options.custom.programs.anime-game-launcher.enable = mkOption {default = false;};
config = mkIf cfg.enable { config = mkIf cfg.enable {

View file

@ -5,13 +5,9 @@
pkgs, pkgs,
... ...
}: }:
with lib; let
with lib;
let
cfg = config.custom.programs.anyrun; cfg = config.custom.programs.anyrun;
in in {
{
options.custom.programs.anyrun.enable = mkOption {default = false;}; options.custom.programs.anyrun.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.appimage;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.appimage;
in {
options.custom.programs.appimage.enable = mkOption {default = false;}; options.custom.programs.appimage.enable = mkOption {default = false;};
config = mkIf cfg.enable { config = mkIf cfg.enable {

View file

@ -1,13 +1,13 @@
{ config, lib, ... }: {
config,
with lib; lib,
...
let }:
with lib; let
wofi = "${config.home-manager.users.${config.custom.username}.programs.wofi.package}/bin/wofi"; wofi = "${config.home-manager.users.${config.custom.username}.programs.wofi.package}/bin/wofi";
cfg = config.custom.programs.bitwarden-menu; cfg = config.custom.programs.bitwarden-menu;
in in {
{
options.custom.programs.bitwarden-menu.enable = mkOption {default = false;}; options.custom.programs.bitwarden-menu.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.chromium;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.chromium;
in {
options.custom.programs.chromium.enable = mkOption {default = false;}; options.custom.programs.chromium.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {

View file

@ -4,13 +4,9 @@
pkgs, pkgs,
... ...
}: }:
with lib; let
with lib;
let
cfg = config.custom.programs.clipse; cfg = config.custom.programs.clipse;
in in {
{
options.custom.programs.clipse.enable = mkOption {default = false;}; options.custom.programs.clipse.enable = mkOption {default = false;};
config = { config = {

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.dconf;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.dconf;
in {
options.custom.programs.dconf.enable = mkOption {default = false;}; options.custom.programs.dconf.enable = mkOption {default = false;};
config = mkIf cfg.enable { config = mkIf cfg.enable {

View file

@ -1,8 +1,9 @@
{ config, lib, ... }:
with lib;
{ {
config,
lib,
...
}:
with lib; {
config.custom.programs = mkMerge [ config.custom.programs = mkMerge [
(mkIf config.custom.default { (mkIf config.custom.default {
direnv.enable = true; direnv.enable = true;

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.direnv;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.direnv;
in {
options.custom.programs.direnv.enable = mkOption {default = false;}; options.custom.programs.direnv.enable = mkOption {default = false;};
config = mkIf cfg.enable { config = mkIf cfg.enable {

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.discord;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.discord;
in {
options.custom.programs.discord.enable = mkOption {default = false;}; options.custom.programs.discord.enable = mkOption {default = false;};
config.home-manager.users.myned = mkIf cfg.enable { config.home-manager.users.myned = mkIf cfg.enable {

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.element-desktop;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.element-desktop;
in {
options.custom.programs.element-desktop.enable = mkOption {default = false;}; options.custom.programs.element-desktop.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {

View file

@ -4,15 +4,11 @@
pkgs, pkgs,
... ...
}: }:
with lib; let
with lib;
let
fastfetch = "${pkgs.fastfetch}/bin/fastfetch"; fastfetch = "${pkgs.fastfetch}/bin/fastfetch";
cfg = config.custom.programs.fastfetch; cfg = config.custom.programs.fastfetch;
in in {
{
options.custom.programs.fastfetch = { options.custom.programs.fastfetch = {
enable = mkOption {default = false;}; enable = mkOption {default = false;};
greet = mkOption {default = false;}; greet = mkOption {default = false;};

View file

@ -5,13 +5,9 @@
pkgs, pkgs,
... ...
}: }:
with lib; let
with lib;
let
cfg = config.custom.programs.firefox; cfg = config.custom.programs.firefox;
in in {
{
options.custom.programs.firefox.enable = mkOption {default = false;}; options.custom.programs.firefox.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {
@ -116,8 +112,7 @@ in
# https://mozilla.github.io/policy-templates/#extensionsettings # https://mozilla.github.io/policy-templates/#extensionsettings
#?? https://addons.mozilla.org/en-US/firefox #?? https://addons.mozilla.org/en-US/firefox
#?? about:support#addons #?? about:support#addons
ExtensionSettings = ExtensionSettings = let
let
extension = id: { extension = id: {
install_url = "https://addons.mozilla.org/firefox/downloads/latest/${id}/latest.xpi"; install_url = "https://addons.mozilla.org/firefox/downloads/latest/${id}/latest.xpi";
installation_mode = "normal_installed"; installation_mode = "normal_installed";
@ -194,14 +189,12 @@ in
#!! Only certain preferences are supported via policies #!! Only certain preferences are supported via policies
# https://mozilla.github.io/policy-templates/#preferences # https://mozilla.github.io/policy-templates/#preferences
#?? about:config #?? about:config
Preferences = Preferences = let
let
locked = value: { locked = value: {
Value = value; Value = value;
Status = "locked"; Status = "locked";
}; };
in in {
{
"accessibility.browsewithcaret" = locked false; "accessibility.browsewithcaret" = locked false;
"accessibility.typeaheadfind" = locked false; "accessibility.typeaheadfind" = locked false;
"browser.aboutConfig.showWarning" = locked false; "browser.aboutConfig.showWarning" = locked false;

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.fish;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.fish;
in {
options.custom.programs.fish.enable = mkOption {default = false;}; options.custom.programs.fish.enable = mkOption {default = false;};
config = mkIf cfg.enable { config = mkIf cfg.enable {

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.foot;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.foot;
in {
options.custom.programs.foot.enable = mkOption {default = false;}; options.custom.programs.foot.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.fuzzel;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.fuzzel;
in {
options.custom.programs.fuzzel.enable = mkOption {default = false;}; options.custom.programs.fuzzel.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.gamemode;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.gamemode;
in {
options.custom.programs.gamemode.enable = mkOption {default = false;}; options.custom.programs.gamemode.enable = mkOption {default = false;};
config = mkIf cfg.enable { config = mkIf cfg.enable {

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.gamescope;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.gamescope;
in {
options.custom.programs.gamescope.enable = mkOption {default = false;}; options.custom.programs.gamescope.enable = mkOption {default = false;};
config = mkIf cfg.enable { config = mkIf cfg.enable {

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.git;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.git;
in {
options.custom.programs.git.enable = mkOption {default = false;}; options.custom.programs.git.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {

View file

@ -4,13 +4,9 @@
pkgs, pkgs,
... ...
}: }:
with lib; let
with lib;
let
cfg = config.custom.programs.gnome-shell; cfg = config.custom.programs.gnome-shell;
in in {
{
options.custom.programs.gnome-shell.enable = mkOption {default = false;}; options.custom.programs.gnome-shell.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {
@ -18,8 +14,7 @@ in
programs.gnome-shell = { programs.gnome-shell = {
enable = true; enable = true;
extensions = extensions = with pkgs.gnomeExtensions;
with pkgs.gnomeExtensions;
optionals config.custom.default [ optionals config.custom.default [
{package = appindicator;} # https://github.com/ubuntu/gnome-shell-extension-appindicator {package = appindicator;} # https://github.com/ubuntu/gnome-shell-extension-appindicator
] ]

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.gnome-terminal;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.gnome-terminal;
in {
options.custom.programs.gnome-terminal.enable = mkOption {default = false;}; options.custom.programs.gnome-terminal.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.gpg;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.gpg;
in {
options.custom.programs.gpg.enable = mkOption {default = false;}; options.custom.programs.gpg.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.htop;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.htop;
in {
options.custom.programs.htop.enable = mkOption {default = false;}; options.custom.programs.htop.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.hyprlock;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.hyprlock;
in {
options.custom.programs.hyprlock.enable = mkOption {default = false;}; options.custom.programs.hyprlock.enable = mkOption {default = false;};
config = mkIf cfg.enable { config = mkIf cfg.enable {

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.kdeconnect;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.kdeconnect;
in {
options.custom.programs.kdeconnect.enable = mkOption {default = false;}; options.custom.programs.kdeconnect.enable = mkOption {default = false;};
config = mkIf cfg.enable { config = mkIf cfg.enable {

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.kitty;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.kitty;
in {
options.custom.programs.kitty.enable = mkOption {default = false;}; options.custom.programs.kitty.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {

View file

@ -4,13 +4,9 @@
pkgs, pkgs,
... ...
}: }:
with lib; let
with lib;
let
cfg = config.custom.programs.libreoffice; cfg = config.custom.programs.libreoffice;
in in {
{
options.custom.programs.libreoffice = { options.custom.programs.libreoffice = {
enable = mkOption {default = false;}; enable = mkOption {default = false;};
package = mkOption {default = pkgs.libreoffice-fresh;}; package = mkOption {default = pkgs.libreoffice-fresh;};

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.librewolf;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.librewolf;
in {
options.custom.programs.librewolf.enable = mkOption {default = false;}; options.custom.programs.librewolf.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {

View file

@ -1,15 +1,16 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.localsend;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.localsend;
in {
options.custom.programs.localsend.enable = mkOption {default = false;}; options.custom.programs.localsend.enable = mkOption {default = false;};
config = config =
if (versionAtLeast version "24.11") then if (versionAtLeast version "24.11")
then
(mkIf cfg.enable { (mkIf cfg.enable {
# https://github.com/localsend/localsend # https://github.com/localsend/localsend
programs.localsend = { programs.localsend = {
@ -17,6 +18,5 @@ in
openFirewall = true; openFirewall = true;
}; };
}) })
else else {};
{ };
} }

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.logseq;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.logseq;
in {
options.custom.programs.logseq.enable = mkOption {default = false;}; options.custom.programs.logseq.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.man;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.man;
in {
options.custom.programs.man.enable = mkOption {default = false;}; options.custom.programs.man.enable = mkOption {default = false;};
config = mkIf cfg.enable { config = mkIf cfg.enable {

View file

@ -4,13 +4,9 @@
pkgs, pkgs,
... ...
}: }:
with lib; let
with lib;
let
cfg = config.custom.programs.mangohud; cfg = config.custom.programs.mangohud;
in in {
{
options.custom.programs.mangohud.enable = mkOption {default = false;}; options.custom.programs.mangohud.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.mosh;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.mosh;
in {
options.custom.programs.mosh.enable = mkOption {default = false;}; options.custom.programs.mosh.enable = mkOption {default = false;};
config = mkIf cfg.enable { config = mkIf cfg.enable {

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.nano;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.nano;
in {
options.custom.programs.nano.enable = mkOption {default = false;}; options.custom.programs.nano.enable = mkOption {default = false;};
config = mkIf cfg.enable { config = mkIf cfg.enable {
@ -20,6 +20,7 @@ in
set autoindent set autoindent
set magic set magic
set minibar set minibar
set linenumbers
set tabsize 2 set tabsize 2
set tabstospaces set tabstospaces
set trimblanks set trimblanks

View file

@ -4,13 +4,9 @@
pkgs, pkgs,
... ...
}: }:
with lib; let
with lib;
let
cfg = config.custom.programs.nautilus; cfg = config.custom.programs.nautilus;
in in {
{
options.custom.programs.nautilus.enable = mkOption {default = false;}; options.custom.programs.nautilus.enable = mkOption {default = false;};
config = mkIf cfg.enable { config = mkIf cfg.enable {

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.networkmanager-dmenu;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.networkmanager-dmenu;
in {
options.custom.programs.networkmanager-dmenu.enable = mkOption {default = false;}; options.custom.programs.networkmanager-dmenu.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {
@ -13,11 +13,9 @@ in
# https://github.com/firecat53/networkmanager-dmenu/blob/main/config.ini.example # https://github.com/firecat53/networkmanager-dmenu/blob/main/config.ini.example
#!! Option not available, files written directly #!! Option not available, files written directly
# FIXME: active_chars does not take effect # FIXME: active_chars does not take effect
home.file.".config/networkmanager-dmenu/config.ini".text = home.file.".config/networkmanager-dmenu/config.ini".text = let
let
wofi = "${config.home-manager.users.${config.custom.username}.programs.wofi.package}/bin/wofi"; wofi = "${config.home-manager.users.${config.custom.username}.programs.wofi.package}/bin/wofi";
in in ''
''
[dmenu] [dmenu]
dmenu_command = ${wofi} --dmenu --lines 11 dmenu_command = ${wofi} --dmenu --lines 11
active_chars = > active_chars = >

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.nh;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.nh;
in {
options.custom.programs.nh.enable = mkOption {default = false;}; options.custom.programs.nh.enable = mkOption {default = false;};
config = mkIf cfg.enable { config = mkIf cfg.enable {
@ -16,7 +16,11 @@ in
clean = { clean = {
enable = true; enable = true;
extraArgs = "--keep-since ${if config.custom.minimal then "7" else "30"}d"; extraArgs = "--keep-since ${
if config.custom.minimal
then "7"
else "30"
}d";
}; };
}; };
}; };

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.nheko;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.nheko;
in {
options.custom.programs.nheko.enable = mkOption {default = false;}; options.custom.programs.nheko.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.nix-index;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.nix-index;
in {
options.custom.programs.nix-index.enable = mkOption {default = false;}; options.custom.programs.nix-index.enable = mkOption {default = false;};
config = mkIf cfg.enable { config = mkIf cfg.enable {

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.nix-ld;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.nix-ld;
in {
options.custom.programs.nix-ld.enable = mkOption {default = false;}; options.custom.programs.nix-ld.enable = mkOption {default = false;};
config = mkIf cfg.enable { config = mkIf cfg.enable {

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.nushell;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.nushell;
in {
options.custom.programs.nushell.enable = mkOption {default = false;}; options.custom.programs.nushell.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.nvtop;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.nvtop;
in {
options.custom.programs.nvtop.enable = mkOption {default = false;}; options.custom.programs.nvtop.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.obs-studio;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.obs-studio;
in {
options.custom.programs.obs-studio.enable = mkOption {default = false;}; options.custom.programs.obs-studio.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.onedrive;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.onedrive;
in {
options.custom.programs.onedrive.enable = mkOption {default = false;}; options.custom.programs.onedrive.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {

View file

@ -4,13 +4,9 @@
pkgs, pkgs,
... ...
}: }:
with lib; let
with lib;
let
cfg = config.custom.programs.path-of-building; cfg = config.custom.programs.path-of-building;
in in {
{
options.custom.programs.path-of-building.enable = mkOption {default = false;}; options.custom.programs.path-of-building.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {

View file

@ -4,13 +4,9 @@
pkgs, pkgs,
... ...
}: }:
with lib; let
with lib;
let
cfg = config.custom.programs.rbw; cfg = config.custom.programs.rbw;
in in {
{
options.custom.programs.rbw.enable = mkOption {default = false;}; options.custom.programs.rbw.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.rofi-rbw;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.rofi-rbw;
in {
options.custom.programs.rofi-rbw.enable = mkOption {default = false;}; options.custom.programs.rofi-rbw.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {

View file

@ -4,13 +4,9 @@
pkgs, pkgs,
... ...
}: }:
with lib; let
with lib;
let
cfg = config.custom.programs.rofi; cfg = config.custom.programs.rofi;
in in {
{
options.custom.programs.rofi.enable = mkOption {default = false;}; options.custom.programs.rofi.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.seahorse;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.seahorse;
in {
options.custom.programs.seahorse.enable = mkOption {default = false;}; options.custom.programs.seahorse.enable = mkOption {default = false;};
config = mkIf cfg.enable { config = mkIf cfg.enable {

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.slurp;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.slurp;
in {
options.custom.programs.slurp.enable = mkOption {default = false;}; options.custom.programs.slurp.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.ssh;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.ssh;
in {
options.custom.programs.ssh.enable = mkOption {default = false;}; options.custom.programs.ssh.enable = mkOption {default = false;};
config = mkIf cfg.enable { config = mkIf cfg.enable {

View file

@ -4,13 +4,9 @@
pkgs, pkgs,
... ...
}: }:
with lib; let
with lib;
let
cfg = config.custom.programs.steam; cfg = config.custom.programs.steam;
in in {
{
# https://wiki.nixos.org/wiki/Steam # https://wiki.nixos.org/wiki/Steam
# https://store.steampowered.com # https://store.steampowered.com
options.custom.programs.steam = { options.custom.programs.steam = {
@ -19,7 +15,8 @@ in
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
programs.steam = { programs.steam =
{
enable = true; enable = true;
extest.enable = cfg.extest; # Work around invisible cursor on Wayland extest.enable = cfg.extest; # Work around invisible cursor on Wayland
extraCompatPackages = [pkgs.proton-ge-bin]; extraCompatPackages = [pkgs.proton-ge-bin];
@ -31,6 +28,7 @@ in
# "--fullscreen" # "--fullscreen"
# ]; # ];
}; };
} // optionalAttrs (versionAtLeast version "24.11") { protontricks.enable = true; }; }
// optionalAttrs (versionAtLeast version "24.11") {protontricks.enable = true;};
}; };
} }

View file

@ -4,13 +4,9 @@
pkgs, pkgs,
... ...
}: }:
with lib; let
with lib;
let
cfg = config.custom.programs.swaylock; cfg = config.custom.programs.swaylock;
in in {
{
options.custom.programs.swaylock.enable = mkOption {default = false;}; options.custom.programs.swaylock.enable = mkOption {default = false;};
config = mkIf cfg.enable { config = mkIf cfg.enable {

View file

@ -5,13 +5,9 @@
pkgs, pkgs,
... ...
}: }:
with lib; let
with lib;
let
cfg = config.custom.programs.thunderbird; cfg = config.custom.programs.thunderbird;
in in {
{
options.custom.programs.thunderbird.enable = mkOption {default = false;}; options.custom.programs.thunderbird.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.tio;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.tio;
in {
options.custom.programs.tio.enable = mkOption {default = false;}; options.custom.programs.tio.enable = mkOption {default = false;};
config = mkIf cfg.enable { config = mkIf cfg.enable {

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.tmux;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.tmux;
in {
options.custom.programs.tmux.enable = mkOption {default = false;}; options.custom.programs.tmux.enable = mkOption {default = false;};
config = mkIf cfg.enable { config = mkIf cfg.enable {

View file

@ -5,13 +5,9 @@
pkgs, pkgs,
... ...
}: }:
with lib; let
with lib;
let
cfg = config.custom.programs.vscode; cfg = config.custom.programs.vscode;
in in {
{
options.custom.programs.vscode.enable = mkOption {default = false;}; options.custom.programs.vscode.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {
@ -67,9 +63,9 @@ in
home = { home = {
# Extension dependencies # Extension dependencies
packages = with pkgs; [ packages = with pkgs; [
alejandra # nix-ide
blueprint-compiler # blueprint-gtk blueprint-compiler # blueprint-gtk
nixd # nix-ide nixd # nix-ide
nixfmt-rfc-style # nix-ide
shfmt # shell-format shfmt # shell-format
]; ];

View file

@ -4,10 +4,7 @@
pkgs, pkgs,
... ...
}: }:
with lib; let
with lib;
let
bash = "${pkgs.bash}/bin/bash"; bash = "${pkgs.bash}/bin/bash";
blueberry = "${pkgs.blueberry}/bin/blueberry"; blueberry = "${pkgs.blueberry}/bin/blueberry";
bluetoothctl = "${pkgs.bluez}/bin/bluetoothctl"; bluetoothctl = "${pkgs.bluez}/bin/bluetoothctl";
@ -35,8 +32,7 @@ let
wttrbar = "${pkgs.wttrbar}/bin/wttrbar"; wttrbar = "${pkgs.wttrbar}/bin/wttrbar";
cfg = config.custom.programs.waybar; cfg = config.custom.programs.waybar;
in in {
{
options.custom.programs.waybar.enable = mkOption {default = false;}; options.custom.programs.waybar.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {
@ -50,8 +46,7 @@ in
### SETTINGS ### ### SETTINGS ###
# https://github.com/Alexays/Waybar/wiki/Configuration # https://github.com/Alexays/Waybar/wiki/Configuration
#?? pkill -SIGUSR2 -x waybar #?? pkill -SIGUSR2 -x waybar
settings = settings = let
let
## INHERIT ## ## INHERIT ##
#!! Module defaults are not accurate to documentation #!! Module defaults are not accurate to documentation
# TODO: Submit pull request to fix in addition to inconsistent hyphen vs underscore # TODO: Submit pull request to fix in addition to inconsistent hyphen vs underscore
@ -92,8 +87,7 @@ in
on-scroll-down = "${swayosd-client} --output-volume lower"; on-scroll-down = "${swayosd-client} --output-volume lower";
rotate = 180; rotate = 180;
}; };
in in {
{
status = { status = {
## GLOBAL ## ## GLOBAL ##
layer = "top"; layer = "top";
@ -138,7 +132,11 @@ in
"custom/vm" = { "custom/vm" = {
interval = 5; interval = 5;
exec = "~/.config/waybar/scripts/vm.sh"; exec = "~/.config/waybar/scripts/vm.sh";
on-click = "~/.local/bin/vm -x ${if config.custom.hidpi then "/scale:140" else ""}"; on-click = "~/.local/bin/vm -x ${
if config.custom.hidpi
then "/scale:140"
else ""
}";
}; };
"custom/vpn" = { "custom/vpn" = {
@ -159,6 +157,7 @@ in
}; };
# https://github.com/Alexays/Waybar/wiki/Module:-Hyprland # https://github.com/Alexays/Waybar/wiki/Module:-Hyprland
# https://www.nerdfonts.com/cheat-sheet
"hyprland/workspaces" = { "hyprland/workspaces" = {
show-special = true; show-special = true;
format = "{icon}"; format = "{icon}";
@ -167,8 +166,9 @@ in
dropdown = "󰞷"; dropdown = "󰞷";
game = "󰊴"; game = "󰊴";
music = "󰝚"; music = "󰝚";
office = "󰈙";
pip = "󰹙"; pip = "󰹙";
scratchpad = "󰎚"; scratchpad = "";
steam = "󰓓"; steam = "󰓓";
terminal = ""; terminal = "";
vm = "󰢹"; vm = "󰢹";
@ -215,7 +215,9 @@ in
]; ];
}; };
"cava#reverse" = cava-config // { "cava#reverse" =
cava-config
// {
reverse = true; reverse = true;
}; };
@ -341,7 +343,7 @@ in
text = '' text = ''
#! /usr/bin/env ${bash} #! /usr/bin/env ${bash}
case "$(virsh --connect qemu:///system domstate myndows)" in case "$(virsh domstate myndows)" in
'running') 'running')
${echo} ${echo}
${echo} Online ${echo} Online

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.wezterm;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.wezterm;
in {
options.custom.programs.wezterm.enable = mkOption {default = false;}; options.custom.programs.wezterm.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {

View file

@ -1,16 +1,20 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.wireshark;
in
{ {
config,
lib,
pkgs,
...
}:
with lib; let
cfg = config.custom.programs.wireshark;
in {
options.custom.programs.wireshark.enable = mkOption {default = false;}; options.custom.programs.wireshark.enable = mkOption {default = false;};
config = mkIf cfg.enable { config = mkIf cfg.enable {
# https://gitlab.com/wireshark/wireshark # https://gitlab.com/wireshark/wireshark
programs.wireshark.enable = true; programs.wireshark = {
enable = true;
package = pkgs.wireshark; # GUI
};
users.users.${config.custom.username}.extraGroups = ["wireshark"]; users.users.${config.custom.username}.extraGroups = ["wireshark"];
}; };

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.wofi;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.wofi;
in {
options.custom.programs.wofi.enable = mkOption {default = false;}; options.custom.programs.wofi.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.programs.wpaperd;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.programs.wpaperd;
in {
options.custom.programs.wpaperd.enable = mkOption {default = false;}; options.custom.programs.wpaperd.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {

View file

@ -4,19 +4,14 @@
pkgs, pkgs,
... ...
}: }:
with lib; let
with lib;
let
# Use packages from local derivation # Use packages from local derivation
git = config.home-manager.users.${config.custom.username}.programs.git.package; git = config.home-manager.users.${config.custom.username}.programs.git.package;
hyprland = hyprland =
config.home-manager.users.${config.custom.username}.wayland.windowManager.hyprland.finalPackage; config.home-manager.users.${config.custom.username}.wayland.windowManager.hyprland.finalPackage;
wofi = config.home-manager.users.${config.custom.username}.programs.wofi.package; wofi = config.home-manager.users.${config.custom.username}.programs.wofi.package;
in in {
{ config.home-manager.users.${config.custom.username}.home.file = let
config.home-manager.users.${config.custom.username}.home.file =
let
# Place script.ext in the same directory as this file # Place script.ext in the same directory as this file
#?? pkg = (SHELL "NAME" [ DEPENDENCIES ]) #?? pkg = (SHELL "NAME" [ DEPENDENCIES ])
# https://nixos.org/manual/nixpkgs/unstable/#trivial-builder-writeShellApplication # https://nixos.org/manual/nixpkgs/unstable/#trivial-builder-writeShellApplication
@ -172,7 +167,6 @@ in
swww swww
tailscale tailscale
]) ])
] ]
++ (with pkgs.python3Packages; [ ++ (with pkgs.python3Packages; [
# Python files with extension .py # Python files with extension .py

View file

@ -6,7 +6,7 @@
workspace="$(hyprctl activewindow -j | jq -r .workspace.name)" workspace="$(hyprctl activewindow -j | jq -r .workspace.name)"
if [[ "$workspace" == "special:scratchpad" ]]; then if [[ "$workspace" == "special:scratchpad" ]]; then
hyprctl dispatch movetoworkspacesilent +0 hyprctl dispatch movetoworkspacesilent 0
else else
hyprctl dispatch movetoworkspacesilent special:scratchpad hyprctl dispatch movetoworkspacesilent special:scratchpad
fi fi

View file

@ -15,9 +15,9 @@ function round() {
# TODO: Use proper flags # TODO: Use proper flags
# TODO: Add clipboard support # TODO: Add clipboard support
if [[ "${1-}" == '-e' ]]; then if [[ "${1-}" == '-e' ]]; then
grimblast save area - | swappy --file - grimblast --freeze save area - | swappy --file -
elif [[ "${1-}" == '-d' ]]; then elif [[ "${1-}" == '-d' ]]; then
grimblast save output - > "$XDG_SCREENSHOTS_DIR/$(date +'%F %H-%M-%S').png" grimblast --freeze save output - > "$XDG_SCREENSHOTS_DIR/$(date +'%F %H-%M-%S').png"
else else
grimblast save area - > "$XDG_SCREENSHOTS_DIR/$(date +'%F %H-%M-%S').png" grimblast --freeze save area - > "$XDG_SCREENSHOTS_DIR/$(date +'%F %H-%M-%S').png"
fi fi

View file

@ -1,27 +1,58 @@
#! /usr/bin/env bash #! /usr/bin/env bash
# Toggle tagged window, launch if needed set -x
#?? toggle TAG WORKSPACE [COMMAND]
# TODO: Use proper flags
# TODO: Support floating groups
if (("$#" >= 3)); then # Toggle pinned window, launch if needed
# Launch if tag does not exist yet #?? toggle --type TYPE --expression EXPRESSION --workspace WORKSPACE [COMMAND]
if ! hyprctl -j clients | jq -r '.[].tags[]' | grep "$1"; then #!! Regex may need to be double-escaped
hyprctl dispatch exec -- "${@:3}" # https://jqlang.github.io/jq/manual/#regular-expressions
focus=false
while (("$#" > 0)); do
case "$1" in
-e | --expression)
shift
expression="$1"
;;
-f | --focus)
focus=true
;;
-t | --type)
shift
type="$1"
;;
-w | --workspace)
shift
workspace="$1"
;;
--)
shift
break
;;
esac
shift
done
command="${*}"
if [[ "$command" ]]; then
if ! hyprctl -j clients | jq -re "any(.[].$type | test(\"$expression\"); . == true)"; then
hyprctl dispatch exec -- "$command" # Launch window
exit exit
fi fi
fi fi
# Dispatchers do not currently support matching by tag, so select address current_workspace="$(hyprctl -j clients | jq -r "first(.[] | select(.$type | test(\"$expression\")).workspace.name)")"
window="address:$(hyprctl -j clients | jq -r "first(.[] | select(.tags[] | startswith(\"$1\")).address)")"
workspace="$(hyprctl -j clients | jq -r "first(.[] | select(.tags[] | startswith(\"$1\")).workspace.name)")" if [[ "$current_workspace" == "$workspace" ]]; then
hyprctl dispatch movetoworkspacesilent "0,$type:$expression" # Move to current workspace first, otherwise some windows freeze
hyprctl dispatch pin "$type:$expression" # Pin
if [[ "$workspace" == "$2" ]]; then if "$focus"; then
hyprctl dispatch pin "$window" # Pin hyprctl dispatch focuswindow "$type:$expression" # Focus
(("$#" >= 3)) && hyprctl dispatch focuswindow "$window" # Focus if third argument fi
else else
hyprctl dispatch pin "$window" # Unpin hyprctl dispatch pin "$type:$expression" # Unpin
hyprctl dispatch movetoworkspacesilent "$2,$window" hyprctl dispatch movetoworkspacesilent "$workspace,$type:$expression" # Move to workspace
fi fi

View file

@ -3,8 +3,6 @@
# Start/resume VM if needed and launch viewer # Start/resume VM if needed and launch viewer
#?? man xfreerdp #?? man xfreerdp
function virsh() { command virsh --connect qemu:///system "$@"; }
state="$(virsh domstate myndows)" state="$(virsh domstate myndows)"
if [[ "$state" == 'paused' ]]; then if [[ "$state" == 'paused' ]]; then

View file

@ -4,16 +4,12 @@
pkgs, pkgs,
... ...
}: }:
with lib; let
with lib;
let
cat = "${pkgs.coreutils}/bin/cat"; cat = "${pkgs.coreutils}/bin/cat";
sed = "${pkgs.gnused}/bin/sed"; sed = "${pkgs.gnused}/bin/sed";
cfg = config.custom.services.agenix; cfg = config.custom.services.agenix;
in in {
{
options.custom.services.agenix.enable = mkOption {default = false;}; options.custom.services.agenix.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.services.auto-cpufreq;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.services.auto-cpufreq;
in {
options.custom.services.auto-cpufreq = { options.custom.services.auto-cpufreq = {
enable = mkOption {default = false;}; enable = mkOption {default = false;};

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.services.avizo;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.services.avizo;
in {
options.custom.services.avizo.enable = mkOption {default = false;}; options.custom.services.avizo.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.services.blueman-applet;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.services.blueman-applet;
in {
options.custom.services.blueman-applet.enable = mkOption {default = false;}; options.custom.services.blueman-applet.enable = mkOption {default = false;};
config.home-manager.users.${config.custom.username} = mkIf cfg.enable { config.home-manager.users.${config.custom.username} = mkIf cfg.enable {

View file

@ -1,11 +1,11 @@
{ config, lib, ... }:
with lib;
let
cfg = config.custom.services.blueman;
in
{ {
config,
lib,
...
}:
with lib; let
cfg = config.custom.services.blueman;
in {
options.custom.services.blueman.enable = mkOption {default = false;}; options.custom.services.blueman.enable = mkOption {default = false;};
config = mkIf cfg.enable { config = mkIf cfg.enable {

View file

@ -5,15 +5,11 @@
pkgs, pkgs,
... ...
}: }:
with lib; let
with lib;
let
cat = "${pkgs.coreutils}/bin/cat"; cat = "${pkgs.coreutils}/bin/cat";
cfg = config.custom.services.borgmatic; cfg = config.custom.services.borgmatic;
in in {
{
# https://wiki.nixos.org/wiki/Borg_backup # https://wiki.nixos.org/wiki/Borg_backup
# https://github.com/borgmatic-collective/borgmatic # https://github.com/borgmatic-collective/borgmatic
#!! Imperative initialization #!! Imperative initialization
@ -68,11 +64,9 @@ in
}; };
}; };
age.secrets = age.secrets = let
let
secret = filename: {file = "${inputs.self}/secrets/${filename}";}; secret = filename: {file = "${inputs.self}/secrets/${filename}";};
in in {
{
"${config.custom.profile}/borgmatic/borgbase.${config.custom.hostname}" = secret "${config.custom.profile}/borgmatic/borgbase.${config.custom.hostname}"; "${config.custom.profile}/borgmatic/borgbase.${config.custom.hostname}" = secret "${config.custom.profile}/borgmatic/borgbase.${config.custom.hostname}";
}; };
}; };

View file

@ -4,25 +4,19 @@
lib, lib,
... ...
}: }:
with lib; let
with lib;
let
cfg = config.custom.services.caddy; cfg = config.custom.services.caddy;
in in {
{
options.custom.services.caddy.enable = mkOption {default = false;}; options.custom.services.caddy.enable = mkOption {default = false;};
config = mkIf cfg.enable { config = mkIf cfg.enable {
age.secrets = age.secrets = let
let
secret = filename: { secret = filename: {
file = "${inputs.self}/secrets/${filename}"; file = "${inputs.self}/secrets/${filename}";
owner = "caddy"; owner = "caddy";
group = "caddy"; group = "caddy";
}; };
in in {
{
"${config.custom.profile}/caddy/Caddyfile" = secret "${config.custom.profile}/caddy/Caddyfile"; "${config.custom.profile}/caddy/Caddyfile" = secret "${config.custom.profile}/caddy/Caddyfile";
}; };

Some files were not shown because too many files have changed in this diff Show more