refactor!: switch to dendritic pattern
BREAKING CHANGE: complete reorganization of the repository
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
{inputs, ...}: {
|
||||
flake-file.inputs.caelestia-shell = {
|
||||
url = "github:caelestia-dots/shell";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
flake.modules.homeManager.caelestia = {
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.home.desktop.caelestia;
|
||||
in {
|
||||
imports = [inputs.caelestia-shell.homeManagerModules.default];
|
||||
|
||||
options.home.desktop.caelestia = {
|
||||
enable = mkEnableOption "Enables Caelestia Shell";
|
||||
idleTimeout = mkOption {
|
||||
description = "Idle duration in seconds before locking the session";
|
||||
default = 60 * 60; # an hour
|
||||
type = types.int;
|
||||
};
|
||||
};
|
||||
config.programs.caelestia = mkIf cfg.enable {
|
||||
inherit (cfg) enable;
|
||||
systemd = {
|
||||
enable = true;
|
||||
target = "graphical-session.target";
|
||||
environment = ["QT3_QPA_PLATFORMTHEME=gtk3"];
|
||||
};
|
||||
settings = {
|
||||
paths.wallpaperDir = "~/Pictures/Wallpapers/nord";
|
||||
general = {
|
||||
apps = {
|
||||
terminal = ["kitty"];
|
||||
audio = ["pavucontrol"];
|
||||
playback = ["mpv"];
|
||||
explorer = ["${pkgs.nemo-with-extensions}/bin/nemo"];
|
||||
};
|
||||
idle = {
|
||||
inhibitWhenAudio = true;
|
||||
timeouts = [
|
||||
{
|
||||
timeout = cfg.idleTimeout;
|
||||
idleAction = "lock";
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
background = {
|
||||
desktopClock.enabled = true;
|
||||
visualiser.enabled = true;
|
||||
};
|
||||
dashboard = {
|
||||
enabled = true;
|
||||
showOnHover = true;
|
||||
};
|
||||
launcher = {
|
||||
enabled = true;
|
||||
showOnHover = false;
|
||||
useFuzzy = {
|
||||
apps = true;
|
||||
schemes = true;
|
||||
wallpapers = true;
|
||||
};
|
||||
};
|
||||
osd.enableMicrophone = true;
|
||||
bar = {
|
||||
status = {
|
||||
showAudio = true;
|
||||
showKbLayout = false;
|
||||
};
|
||||
tray.compact = true;
|
||||
};
|
||||
services = mkIf (config.home.gpuType != null) {
|
||||
inherit (config.home) gpuType;
|
||||
};
|
||||
session.commands = {
|
||||
logout = ["uwsm" "stop"];
|
||||
shutdown = ["systemctl" "poweroff"];
|
||||
hibernate = ["systemctl" "hibernate"];
|
||||
reboot = ["systemctl" "reboot"];
|
||||
};
|
||||
utilities.toasts = {
|
||||
capsLockChanged = false;
|
||||
numLockChanged = false;
|
||||
kbLayoutChanged = false;
|
||||
};
|
||||
};
|
||||
cli = {
|
||||
enable = true;
|
||||
settings.theme.enableGtk = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
{config, ...}: let
|
||||
m = config.flake.modules.homeManager;
|
||||
in {
|
||||
flake.modules.homeManager.desktop = {
|
||||
lib,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.home.desktop;
|
||||
in {
|
||||
imports = [
|
||||
m.caelestia
|
||||
m.firefox
|
||||
m.hyprland
|
||||
m.hyprpaper
|
||||
m.kdeconnect
|
||||
m.kitty
|
||||
m.obs
|
||||
m.rofi
|
||||
m.spotify
|
||||
m.swaync
|
||||
m.theme
|
||||
m.waybar
|
||||
m.wl-kbptr
|
||||
m.wlr-which-key
|
||||
m.wlsunset
|
||||
];
|
||||
|
||||
options.home.desktop.fullDesktop = mkEnableOption "Enable options for graphical environments";
|
||||
config.home.desktop = {
|
||||
firefox.enable = mkDefault cfg.fullDesktop;
|
||||
hyprland.enable = mkDefault cfg.fullDesktop;
|
||||
kdeconnect.enable = mkDefault cfg.fullDesktop;
|
||||
kitty.enable = mkDefault cfg.fullDesktop;
|
||||
obs.enable = mkDefault cfg.fullDesktop;
|
||||
rofi.enable = mkDefault cfg.fullDesktop;
|
||||
spotify.enable = mkDefault cfg.fullDesktop;
|
||||
spotify.spicetify.enable = mkDefault cfg.fullDesktop;
|
||||
theme.enable = mkDefault cfg.fullDesktop;
|
||||
wlr-which-key.enable = mkDefault cfg.fullDesktop;
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
{inputs, ...}: {
|
||||
flake-file.inputs.zen-browser = {
|
||||
url = "github:youwen5/zen-browser-flake";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
flake.modules.homeManager.firefox = {
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.home.desktop.firefox;
|
||||
inherit (pkgs.stdenv.hostPlatform) system;
|
||||
zen = inputs.zen-browser.packages.${system}.default;
|
||||
settingsToLines = settings:
|
||||
concatStringsSep "\n" (mapAttrsToList (name: value: "set ${name} ${toString value}") settings);
|
||||
in {
|
||||
options.home.desktop.firefox = {
|
||||
enable = mkEnableOption "enable Firefox";
|
||||
useZen = mkEnableOption "use Zen instead of Firefox";
|
||||
tridactyl = {
|
||||
enable = mkEnableOption "enable Tridactyl";
|
||||
preConfig = mkOption {
|
||||
description = "Lines to add to the beginning of tridactylrc";
|
||||
type = types.lines;
|
||||
default = "";
|
||||
};
|
||||
config = mkOption {
|
||||
type = with types;
|
||||
attrsOf (oneOf [
|
||||
int
|
||||
str
|
||||
bool
|
||||
]);
|
||||
description = "Tridactyl settings (converted to 'set key value' lines)";
|
||||
default = {};
|
||||
example = {
|
||||
smoothscroll = true;
|
||||
history = 1000;
|
||||
};
|
||||
};
|
||||
extraConfig = mkOption {
|
||||
description = "Extra lines to add to tridactylrc (for bindings, autocmds, etc)";
|
||||
type = types.lines;
|
||||
default = "";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
home.sessionVariables.MOZ_ENABLE_WAYLAND = "1";
|
||||
programs.firefox = {
|
||||
inherit (cfg) enable;
|
||||
package =
|
||||
if cfg.useZen
|
||||
then zen
|
||||
else pkgs.firefox;
|
||||
nativeMessagingHosts = lists.optional cfg.tridactyl.enable pkgs.tridactyl-native;
|
||||
configPath = ".mozilla/firefox";
|
||||
};
|
||||
xdg.configFile."tridactyl/tridactylrc" = mkIf cfg.tridactyl.enable {
|
||||
text = concatStringsSep "\n" (filter (s: s != "") [
|
||||
cfg.tridactyl.preConfig
|
||||
(settingsToLines (cfg.tridactyl.config
|
||||
// {
|
||||
browser =
|
||||
if cfg.useZen
|
||||
then "zen"
|
||||
else "firefox";
|
||||
}))
|
||||
cfg.tridactyl.extraConfig
|
||||
]);
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
{
|
||||
flake.modules.homeManager.hyprpaper = {
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.home.desktop.hyprpaper;
|
||||
in {
|
||||
options.home.desktop.hyprpaper = {
|
||||
enable = mkEnableOption "Enables Hyprpaper";
|
||||
default = mkOption {
|
||||
type = types.str;
|
||||
default = "/home/phundrak/Pictures/Wallpapers/nord/Nordic6.jpg";
|
||||
example = "/home/user/image.jpg";
|
||||
};
|
||||
wallpapers-dir = mkOption {
|
||||
type = types.str;
|
||||
default = "/home/phundrak/Pictures/Wallpapers/nord/";
|
||||
example = "/home/user/Pictures/";
|
||||
};
|
||||
rotation-interval = mkOption {
|
||||
type = types.str;
|
||||
default = "5m";
|
||||
example = "10m";
|
||||
description = "Interval between wallpaper rotations";
|
||||
};
|
||||
};
|
||||
config = mkIf cfg.enable {
|
||||
services.hyprpaper = {
|
||||
inherit (cfg) enable;
|
||||
settings = {
|
||||
ipc = "on";
|
||||
splash = false;
|
||||
preload = cfg.default;
|
||||
wallpaper = ", ${cfg.default}";
|
||||
};
|
||||
};
|
||||
systemd.user = {
|
||||
services.hyprpaper-rotation = {
|
||||
Unit = {
|
||||
Description = "Rotate Hyprpaper wallpaper";
|
||||
After = "graphical-session.target";
|
||||
};
|
||||
Service = {
|
||||
Type = "oneshot";
|
||||
ExecCondition = "${pkgs.procps}/bin/pidof Hyprland";
|
||||
ExecStart = "${config.home.homeDirectory}/.config/hypr/hyprpaper-rotate.sh";
|
||||
};
|
||||
};
|
||||
|
||||
timers.hyprpaper-rotation = {
|
||||
Unit = {
|
||||
Description = "Timer for rotating Hyprpaper wallpaper";
|
||||
};
|
||||
Timer = {
|
||||
OnBootSec = cfg.rotation-interval;
|
||||
OnUnitActiveSec = cfg.rotation-interval;
|
||||
};
|
||||
Install = {
|
||||
WantedBy = ["timers.target"];
|
||||
};
|
||||
};
|
||||
};
|
||||
home.file.".config/hypr/hyprpaper-rotate.sh" = {
|
||||
text = ''
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
WALLPAPER_DIR="${cfg.wallpapers-dir}"
|
||||
|
||||
# Find a random wallpaper
|
||||
WP=$(find "$WALLPAPER_DIR" -type f \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" \) | shuf -n 1)
|
||||
|
||||
if [ -z "$WP" ]; then
|
||||
echo "No wallpapers found in $WALLPAPER_DIR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Setting wallpaper to: $WP"
|
||||
|
||||
# Load and set the wallpaper
|
||||
${pkgs.hyprland}/bin/hyprctl hyprpaper preload "$WP" && ${pkgs.hyprland}/bin/hyprctl hyprpaper wallpaper ",$WP"
|
||||
'';
|
||||
executable = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
flake.modules.homeManager.kdeconnect = {
|
||||
lib,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.home.desktop.kdeconnect;
|
||||
in {
|
||||
options.home.desktop.kdeconnect.enable = mkEnableOption "Enable KDE Connect";
|
||||
config.services.kdeconnect = mkIf cfg.enable {
|
||||
enable = true;
|
||||
indicator = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,116 @@
|
||||
{
|
||||
flake.modules.homeManager.kitty = {
|
||||
pkgs,
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.home.desktop.kitty;
|
||||
in {
|
||||
options.home.desktop.kitty.enable = mkEnableOption "Enable kitty terminal";
|
||||
config.programs.kitty = mkIf cfg.enable {
|
||||
inherit (cfg) enable;
|
||||
themeFile = "Nord";
|
||||
font = {
|
||||
package = pkgs.cascadia-code;
|
||||
name = "Cascadia Code";
|
||||
size = 10;
|
||||
};
|
||||
settings = {
|
||||
enable_audio_bell = true;
|
||||
visual_bell_duration = 0.1;
|
||||
enabled_layouts = "fat,fat:mirrored=true,tall,tall:mirrored=true";
|
||||
kitty_mod = "ctrl+shift";
|
||||
disable_ligatures = "never";
|
||||
font_features = "Cascadia-Mono +onum +zero";
|
||||
cursor_shape = "block";
|
||||
scrollback_lines = "10000";
|
||||
mouse_hide_wait = 3.0;
|
||||
detect_urls = true;
|
||||
background_opacity = 0.7;
|
||||
};
|
||||
keybindings = let
|
||||
prefix = "kitty_mod+space";
|
||||
in {
|
||||
"alt+c" = "copy_to_clipboard";
|
||||
"kitty_mod+c" = "copy_to_clipboard";
|
||||
"alt+v" = "paste_from_clipboard";
|
||||
"kitty_mod+v" = "paste_from_clipboard";
|
||||
|
||||
"${prefix}>s>c" = "show_scrollback";
|
||||
"${prefix}>s>down" = "scroll_line_down";
|
||||
"${prefix}>s>t" = "scroll_line_down";
|
||||
"${prefix}>s>up" = "scroll_line_up";
|
||||
"${prefix}>s>s" = "scroll_line_up";
|
||||
"${prefix}>s>end" = "scroll_end";
|
||||
"${prefix}>s>home" = "scroll_home";
|
||||
"${prefix}>s>page_down" = "scroll_page_down";
|
||||
"${prefix}>s>page_up" = "scroll_page_up";
|
||||
|
||||
"${prefix}>enter" = "new_window";
|
||||
"${prefix}>w>q" = "close_window";
|
||||
"${prefix}>w>p" = "next_window";
|
||||
"${prefix}>w>n" = "previous_window";
|
||||
"${prefix}>w>f" = "move_window_forward";
|
||||
"${prefix}>w>b" = "move_window_backward";
|
||||
"${prefix}>w>t" = "move_window_to_top";
|
||||
"${prefix}>w>r" = "start_resizing_window";
|
||||
"${prefix}>w>1" = "first_window";
|
||||
"${prefix}>w>2" = "second_window";
|
||||
"${prefix}>w>3" = "third_window";
|
||||
"${prefix}>w>4" = "fourth_window";
|
||||
"${prefix}>w>5" = "fifth_window";
|
||||
"${prefix}>w>6" = "sixth_window";
|
||||
"${prefix}>w>7" = "seventh_window";
|
||||
"${prefix}>w>8" = "eighth_window";
|
||||
"${prefix}>w>9" = "ninth_window";
|
||||
"${prefix}>w>0" = "tenth_window";
|
||||
|
||||
"${prefix}>tab>n" = "next_tab";
|
||||
"${prefix}>tab>p" = "previous_tab";
|
||||
"${prefix}>tab>c" = "new_tab";
|
||||
"${prefix}>tab>q" = "close_tab";
|
||||
"${prefix}>tab>shift+n" = "move_tab_backward";
|
||||
"${prefix}>tab>shift+p" = "move_tab_forward";
|
||||
"${prefix}>tab>t" = "set_tab_title";
|
||||
|
||||
"${prefix}>l" = "next_layout";
|
||||
|
||||
"${prefix}>f>equal" = "change_font_size all 0";
|
||||
"${prefix}>f>kp_add" = "change_font_size all +2.0";
|
||||
"${prefix}>f>plus" = "change_font_size all +2.0";
|
||||
"${prefix}>f>kp_subtract" = "change_font_size all -2.0";
|
||||
"${prefix}>f>minus" = "change_font_size all -2.0";
|
||||
|
||||
"${prefix}>shift+h" = "kitten hints";
|
||||
"${prefix}>h>p" = "kitten hints --type path --program -";
|
||||
"${prefix}>h>shift+p" = "kitten hints --type path";
|
||||
"${prefix}>h>l" = "kitten hints --type line --program -";
|
||||
"${prefix}>h>w" = "kitten hints --type word --program -";
|
||||
"${prefix}>h>h" = "kitten hints --type hash --program -";
|
||||
"${prefix}>h>n" = "kitten hints --type linenum";
|
||||
"${prefix}>h>y" = "kitten hints --type hyperlink";
|
||||
|
||||
"${prefix}>f10" = "toggle_maximized";
|
||||
"${prefix}>f11" = "toggle_fullscreen";
|
||||
|
||||
"${prefix}>a>equal" = "set_background_opacity 1";
|
||||
"${prefix}>a>d" = "set_background_opacity default";
|
||||
"${prefix}>a>plus" = "set_background_opacity +0.1";
|
||||
"${prefix}>a>up" = "set_background_opacity +0.1";
|
||||
"${prefix}>a>kp_add" = "set_background_opacity +0.1";
|
||||
"${prefix}>a>minus" = "set_background_opacity -0.1";
|
||||
"${prefix}>a>down" = "set_background_opacity -0.1";
|
||||
"${prefix}>a>kp_substract" = "set_background_opacity -0.1";
|
||||
|
||||
"${prefix}>delete" = "clear_terminal reset active";
|
||||
"${prefix}>escape" = "kitty_shell window";
|
||||
"${prefix}>f2" = "edit_config_file";
|
||||
"${prefix}>n" = "new_os_window";
|
||||
"${prefix}>o" = "pass_selection_to_program";
|
||||
"${prefix}>u" = "kitten unicode_input";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
flake.modules.homeManager.obs = {
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.home.desktop.obs;
|
||||
obs-image-reaction = pkgs.callPackage ../../../packages/obs-image-reaction.nix {};
|
||||
in {
|
||||
options.home.desktop.obs.enable = mkEnableOption "Enables OBS Studio";
|
||||
config.programs.obs-studio = mkIf cfg.enable {
|
||||
inherit (cfg) enable;
|
||||
plugins = with pkgs.obs-studio-plugins; [
|
||||
input-overlay
|
||||
obs-backgroundremoval
|
||||
obs-markdown
|
||||
obs-mute-filter
|
||||
obs-pipewire-audio-capture
|
||||
obs-scale-to-sound
|
||||
obs-source-clone
|
||||
obs-source-record
|
||||
obs-tuna
|
||||
obs-image-reaction
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 228 KiB |
@@ -0,0 +1,109 @@
|
||||
{
|
||||
flake.modules.homeManager.rofi = {
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.home.desktop.rofi;
|
||||
inherit (config.lib.formats.rasi) mkLiteral;
|
||||
in {
|
||||
options.home.desktop.rofi = {
|
||||
enable = mkEnableOption "Enable Rofi";
|
||||
};
|
||||
config = mkIf cfg.enable {
|
||||
home.packages = with pkgs; [rofi-bluetooth];
|
||||
programs.rofi = {
|
||||
enable = true;
|
||||
plugins = with pkgs; [
|
||||
rofi-calc
|
||||
rofi-emoji
|
||||
];
|
||||
terminal = "${pkgs.kitty}/bin/kitty";
|
||||
location = "center";
|
||||
modes = ["drun" "emoji" "calc" "combi"];
|
||||
extraConfig.show-icons = true;
|
||||
theme = {
|
||||
"*" = {
|
||||
font = "Cascadia Code 14";
|
||||
blur = true;
|
||||
padding = mkLiteral "10px";
|
||||
background-color = mkLiteral "transparent";
|
||||
border-radius = mkLiteral "0px";
|
||||
};
|
||||
window = {
|
||||
width = mkLiteral "1050px";
|
||||
height = mkLiteral "625px";
|
||||
location = mkLiteral "center";
|
||||
blur = true;
|
||||
border = mkLiteral "2px";
|
||||
border-radius = mkLiteral "3px";
|
||||
border-color = mkLiteral "#61afef";
|
||||
background-color = mkLiteral "transparent";
|
||||
padding = mkLiteral "0px";
|
||||
margin = mkLiteral "30px 50px";
|
||||
};
|
||||
mainbox = {
|
||||
orientation = mkLiteral "horizontal";
|
||||
children = map mkLiteral ["borderbox"];
|
||||
spacing = mkLiteral "0px";
|
||||
padding = mkLiteral "0px";
|
||||
};
|
||||
borderbox = {
|
||||
orientation = mkLiteral "horizontal";
|
||||
children = map mkLiteral ["imagebox" "contentbox"];
|
||||
padding = mkLiteral "0px";
|
||||
spacing = mkLiteral "0px";
|
||||
border-radius = mkLiteral "3px";
|
||||
};
|
||||
contentbox = {
|
||||
orientation = mkLiteral "vertical";
|
||||
children = map mkLiteral ["entry" "listview"];
|
||||
spacing = mkLiteral "0px";
|
||||
padding = mkLiteral "0px";
|
||||
expand = true;
|
||||
};
|
||||
imagebox = {
|
||||
background-image = mkLiteral "url(\"${./image.jpg}\")";
|
||||
background-repeat = false;
|
||||
size = mkLiteral "200px 625px";
|
||||
};
|
||||
element = {
|
||||
border-radius = mkLiteral "0px";
|
||||
};
|
||||
"element-text, element-icon" = {
|
||||
padding = mkLiteral "6px 8px";
|
||||
spacing = mkLiteral "2px";
|
||||
text-color = mkLiteral "#fab387";
|
||||
};
|
||||
"element selected" = {
|
||||
background-color = mkLiteral "#191919";
|
||||
text-color = mkLiteral "#e5c07b";
|
||||
border-radius = mkLiteral "3px";
|
||||
};
|
||||
prompt = {
|
||||
enabled = false;
|
||||
background-color = mkLiteral "transparent";
|
||||
text-color = mkLiteral "#61afef";
|
||||
padding = mkLiteral "5px 10px";
|
||||
};
|
||||
entry = {
|
||||
padding = mkLiteral "8px";
|
||||
expand = false;
|
||||
font = "Cascadia Code 14";
|
||||
text-color = mkLiteral "#fab387";
|
||||
border-radius = mkLiteral "0px 3px 0px 0px";
|
||||
background-color = mkLiteral "#292e36";
|
||||
};
|
||||
listview = {
|
||||
lines = mkLiteral "1";
|
||||
background-color = mkLiteral "rgba(46, 52, 64, 0.8)";
|
||||
border-radius = mkLiteral "0px 0px 3px 0px";
|
||||
padding = mkLiteral "5px";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
{inputs, ...}: {
|
||||
flake-file.inputs.spicetify = {
|
||||
url = "github:Gerg-L/spicetify-nix";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
flake.modules.homeManager.spotify = {
|
||||
pkgs,
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
inherit (pkgs.stdenv.hostPlatform) system;
|
||||
cfg = config.home.desktop.spotify;
|
||||
spicePkgs = inputs.spicetify.legacyPackages.${system};
|
||||
in {
|
||||
imports = [inputs.spicetify.homeManagerModules.default];
|
||||
|
||||
options.home.desktop.spotify = {
|
||||
enable = mkEnableOption "Enable Spotify";
|
||||
spicetify.enable = mkEnableOption "Enable Spicetify";
|
||||
};
|
||||
config.programs = mkIf cfg.enable {
|
||||
spotify-player.enable = cfg.enable;
|
||||
spicetify = mkIf cfg.spicetify.enable {
|
||||
inherit (cfg.spicetify) enable;
|
||||
theme = spicePkgs.themes.sleek;
|
||||
colorScheme = "Nord";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{...}: {
|
||||
flake.modules.homeManager.swaync = {
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.home.desktop.swaync;
|
||||
in {
|
||||
options.home.desktop.swaync.enable = mkEnableOption "Enables swaync";
|
||||
config = mkIf cfg.enable {
|
||||
services.swaync.enable = true;
|
||||
home.packages = [pkgs.swaynotificationcenter];
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
{
|
||||
flake.modules.homeManager.theme = {
|
||||
pkgs,
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.home.desktop.theme;
|
||||
in {
|
||||
options.home.desktop.theme.enable = mkEnableOption "Enable theme options";
|
||||
config = mkIf cfg.enable {
|
||||
gtk = {
|
||||
enable = true;
|
||||
colorScheme = "dark";
|
||||
iconTheme = {
|
||||
name = "Nordzy-icons";
|
||||
package = pkgs.nordzy-icon-theme;
|
||||
};
|
||||
theme = {
|
||||
package = pkgs.nordic;
|
||||
name = "Nordic";
|
||||
};
|
||||
gtk4.theme = config.gtk.theme;
|
||||
};
|
||||
home.pointerCursor = {
|
||||
enable = true;
|
||||
gtk.enable = true;
|
||||
hyprcursor.enable = config.home.desktop.hyprland.enable;
|
||||
name = "Nordzy-cursors";
|
||||
package = pkgs.nordzy-cursor-theme;
|
||||
};
|
||||
qt.enable = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,156 @@
|
||||
{
|
||||
flake.modules.homeManager.waybar = {
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.home.desktop.waybar;
|
||||
in {
|
||||
options.home.desktop.waybar = {
|
||||
enable = mkEnableOption "Enables waybar.";
|
||||
battery = mkEnableOption "Enables battery support.";
|
||||
style = mkOption {
|
||||
type = types.path;
|
||||
example = ./style.css;
|
||||
};
|
||||
};
|
||||
config.programs.waybar = mkIf cfg.enable {
|
||||
inherit (cfg) enable;
|
||||
systemd.enable = true;
|
||||
settings = {
|
||||
topBar = {
|
||||
height = 24;
|
||||
spacing = 2;
|
||||
modules-left = ["hyprland/workspaces" "hyprland/submap" "hyprland/window"];
|
||||
modules-center = [];
|
||||
modules-right = [
|
||||
"idle_inhibitor"
|
||||
"group/audio"
|
||||
"group/hardware"
|
||||
"network"
|
||||
"privacy"
|
||||
"clock"
|
||||
"tray"
|
||||
];
|
||||
|
||||
idle_inhibitor = {
|
||||
format = "{icon}";
|
||||
format-icons = {
|
||||
activated = "";
|
||||
deactivated = "";
|
||||
};
|
||||
};
|
||||
|
||||
mpris = {
|
||||
dynamic-order = ["title" "artist" "album"];
|
||||
dynamic-importance-order = ["title" "artist" "album"];
|
||||
format = "DEFAULT: {player_icon} {dynamic}";
|
||||
format-paused = "DEFAULT: {status_icon} <i>{dynamic}</i>";
|
||||
player-icons = {
|
||||
default = "▶";
|
||||
mpv = "🎵";
|
||||
};
|
||||
status-icons.paused = "⏸";
|
||||
ignored-players = [];
|
||||
};
|
||||
|
||||
pulseaudio = {
|
||||
format = "{volume}% {icon} {format_source}";
|
||||
format-bluetooth = "{volume}% {icon} {format_source}";
|
||||
format-bluetooth-muted = " {icon} {format_source}";
|
||||
format-muted = " {format_source}";
|
||||
format-source = "{volume}% ";
|
||||
format-source-muted = "";
|
||||
format-icons = {
|
||||
headphone = "";
|
||||
hands-free = "";
|
||||
headset = "";
|
||||
phone = "";
|
||||
portable = "";
|
||||
car = "";
|
||||
default = ["" "" ""];
|
||||
};
|
||||
on-click = "pavucontrol";
|
||||
};
|
||||
|
||||
network = {
|
||||
format-wifi = "{essid} ({signalStrength}%) ";
|
||||
format-ethernet = "{ipaddr}/{cidr} ";
|
||||
tooltip-format = "{ifname} via {gwaddr} ";
|
||||
format-linked = "{ifname} (No IP) ";
|
||||
format-disconnected = "Disconnected ⚠";
|
||||
format-alt = "{ifname}: {ipaddr}/{cidr}";
|
||||
};
|
||||
|
||||
"group/audio" = {
|
||||
modules = ["pulseaudio" "pulseaudio/slider" "mpris"];
|
||||
orientation = "inherit";
|
||||
drawer.transition-duration = 300;
|
||||
};
|
||||
|
||||
"group/hardware" = {
|
||||
modules = lists.optional cfg.battery "battery" ++ ["cpu" "memory" "disk"];
|
||||
orientation = "inherit";
|
||||
drawer.transition-duration = 300;
|
||||
};
|
||||
|
||||
cpu = {
|
||||
format = "{usage}% ";
|
||||
tooltip = false;
|
||||
};
|
||||
|
||||
memory.format = "{}% ";
|
||||
|
||||
disk = {
|
||||
format = "{path}: {used}/{total} ({percentage_used}%)";
|
||||
unit = "GB";
|
||||
};
|
||||
|
||||
battery = {
|
||||
states = {
|
||||
good = 90;
|
||||
warning = 30;
|
||||
critical = 15;
|
||||
};
|
||||
format = "{capacity}% {icon}";
|
||||
format-charging = "{capacity}% ";
|
||||
format-plugged = "{capacity}% ";
|
||||
format-alt = "{time} {icon}";
|
||||
# An empty format will hide the module
|
||||
format-good = "";
|
||||
format-full = "";
|
||||
format-icons = ["" "" "" "" ""];
|
||||
};
|
||||
|
||||
clock = {
|
||||
timezones = ["Europe/Paris" "Asia/Tokyo" "America/New_York" "America/Los_Angeles" "Asia/Kathmandu"];
|
||||
tooltip-format = "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>";
|
||||
format-alt = "{:%Y-%m-%d}";
|
||||
actions = {
|
||||
on-click-right = "mode";
|
||||
on-scroll-up = "tz_up";
|
||||
on-scroll-down = "tz_down";
|
||||
};
|
||||
calendar = {
|
||||
mode = "year";
|
||||
mode-mon-col = 3;
|
||||
weeks-pos = "right";
|
||||
on-scroll = 1;
|
||||
format = {
|
||||
months = "<span color='#eceff4'><b>{}</b></span>";
|
||||
days = "<span color='#5e81ac'><b>{}</b></span>";
|
||||
weeks = "<span color='#8fbcbb'><b>W{:%W}</b></span>";
|
||||
weekdays = "<span color='#d8dee9'><b>{}</b></span>";
|
||||
today = "<span color='#a3be8c'><b><u>{}</u></b></span>";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
tray.spacing = 10;
|
||||
};
|
||||
};
|
||||
style = builtins.readFile cfg.style;
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
{
|
||||
flake.modules.homeManager.wl-kbptr = {
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
configDir = config.xdg.configHome;
|
||||
cfg = config.home.desktop.wl-kbptr;
|
||||
iniFormat = pkgs.formats.ini {};
|
||||
in {
|
||||
options.home.desktop.wl-kbptr = {
|
||||
enable = mkEnableOption "enable wl-kbptr";
|
||||
config = mkOption {
|
||||
inherit (iniFormat) type;
|
||||
default = {};
|
||||
description = ''
|
||||
Options to add to the {file}`config` file. See
|
||||
<https://github.com/moverest/wl-kbptr/blob/main/config.example>
|
||||
for options.
|
||||
'';
|
||||
example = {
|
||||
general = {
|
||||
home_row_keys = "abcd";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
config = mkIf cfg.enable {
|
||||
home = {
|
||||
packages = [pkgs.wl-kbptr];
|
||||
file."${configDir}/wl-kbptr/config" = mkIf (cfg.config != {}) {
|
||||
source = iniFormat.generate "wl-kbptr-config" cfg.config;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,191 @@
|
||||
{
|
||||
flake.modules.homeManager.wlr-which-key = {
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
inherit
|
||||
(lib)
|
||||
literalExpression
|
||||
mkIf
|
||||
mkOption
|
||||
mkEnableOption
|
||||
types
|
||||
;
|
||||
cfg = config.home.desktop.wlr-which-key;
|
||||
yamlFormat = pkgs.formats.yaml {};
|
||||
|
||||
# Convert kebab-case to snake_case
|
||||
toSnakeCase = str: builtins.replaceStrings ["-"] ["_"] str;
|
||||
|
||||
# Recursively filter out null values and convert kebab-case keys to snake_case
|
||||
filterNulls = value:
|
||||
if lib.isAttrs value
|
||||
then lib.mapAttrs' (n: v: lib.nameValuePair (toSnakeCase n) (filterNulls v)) (lib.filterAttrs (_: v: v != null) value)
|
||||
else if lib.isList value
|
||||
then map filterNulls value
|
||||
else value;
|
||||
menuEntryType = types.submodule {
|
||||
freeformType = yamlFormat.type;
|
||||
options = with types; {
|
||||
key = mkOption {
|
||||
type = str;
|
||||
example = "p";
|
||||
};
|
||||
desc = mkOption {
|
||||
type = str;
|
||||
example = "Power";
|
||||
};
|
||||
cmd = mkOption {
|
||||
type = nullOr str;
|
||||
default = null;
|
||||
example = "echo example";
|
||||
};
|
||||
keep-open = mkOption {
|
||||
type = nullOr bool;
|
||||
default = null;
|
||||
example = true;
|
||||
};
|
||||
submenu = mkOption {
|
||||
type = nullOr (listOf menuEntryType);
|
||||
default = null;
|
||||
example = literalExpression ''
|
||||
[
|
||||
{ key = "s"; desc = "Suspend"; cmd = "systemctl suspend"; }
|
||||
{ key = "r"; desc = "Reboot"; cmd = "systemctl reboot"; }
|
||||
{ key = "o"; desc = "Poweroff"; cmd = "systemctl poweroff"; }
|
||||
]
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
settingsType = types.submodule {
|
||||
freeformType = yamlFormat.type;
|
||||
options = with types; {
|
||||
background = mkOption {
|
||||
type = nullOr str;
|
||||
default = null;
|
||||
example = "#282828FF";
|
||||
};
|
||||
color = mkOption {
|
||||
type = nullOr str;
|
||||
default = null;
|
||||
example = "#FBF1C7FF";
|
||||
};
|
||||
border = mkOption {
|
||||
type = nullOr str;
|
||||
default = null;
|
||||
example = "#8EC07CFF";
|
||||
};
|
||||
anchor = mkOption {
|
||||
type = nullOr (enum ["center" "top" "bottom" "left" "right" "top-left" "top-right" "bottom-left" "bottom-right"]);
|
||||
default = null;
|
||||
example = "top-left";
|
||||
};
|
||||
margin-top = mkOption {
|
||||
type = nullOr int;
|
||||
default = null;
|
||||
example = "0";
|
||||
};
|
||||
margin-right = mkOption {
|
||||
type = nullOr int;
|
||||
default = null;
|
||||
example = "0";
|
||||
};
|
||||
margin-bottom = mkOption {
|
||||
type = nullOr int;
|
||||
default = null;
|
||||
example = "0";
|
||||
};
|
||||
margin-left = mkOption {
|
||||
type = nullOr int;
|
||||
default = null;
|
||||
example = "0";
|
||||
};
|
||||
font = mkOption {
|
||||
type = nullOr str;
|
||||
default = null;
|
||||
example = "monospace 10";
|
||||
};
|
||||
separator = mkOption {
|
||||
type = nullOr str;
|
||||
default = null;
|
||||
example = " ➜ ";
|
||||
};
|
||||
border-width = mkOption {
|
||||
type = nullOr (either float int);
|
||||
default = null;
|
||||
example = 4.0;
|
||||
};
|
||||
corder-r = mkOption {
|
||||
type = nullOr (either float int);
|
||||
default = null;
|
||||
example = 20.0;
|
||||
};
|
||||
padding = mkOption {
|
||||
type = nullOr (either float int);
|
||||
default = null;
|
||||
example = 15.0;
|
||||
};
|
||||
rows-per-column = mkOption {
|
||||
type = nullOr int;
|
||||
default = null;
|
||||
example = 5;
|
||||
};
|
||||
column-padding = mkOption {
|
||||
type = nullOr (either float int);
|
||||
default = null;
|
||||
example = 25.0;
|
||||
};
|
||||
inhibit-compositor-keyboard-shortcuts = mkOption {
|
||||
type = bool;
|
||||
default = true;
|
||||
example = false;
|
||||
};
|
||||
auto_kbd_layout = mkOption {
|
||||
type = bool;
|
||||
default = true;
|
||||
example = false;
|
||||
};
|
||||
namespace = mkOption {
|
||||
type = nullOr str;
|
||||
default = null;
|
||||
example = "wlr_which_key";
|
||||
};
|
||||
menu = mkOption {
|
||||
type = listOf menuEntryType;
|
||||
default = [];
|
||||
example = literalExpression ''
|
||||
[
|
||||
{
|
||||
key = "p";
|
||||
desc = "Power";
|
||||
submenu = [
|
||||
{ key = "s"; desc = "Suspend"; cmd = "systemctl suspend"; }
|
||||
{ key = "r"; desc = "Reboot"; cmd = "systemctl reboot"; }
|
||||
{ key = "o"; desc = "Poweroff"; cmd = "systemctl poweroff"; }
|
||||
];
|
||||
}
|
||||
]
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
in {
|
||||
options.home.desktop.wlr-which-key = {
|
||||
enable = mkEnableOption "Enables wlr-which-key";
|
||||
package = lib.mkPackageOption pkgs "wlr-which-key" {};
|
||||
settings = mkOption {
|
||||
type = settingsType;
|
||||
default = {};
|
||||
description = "Configuration written to {file}`$XDG_CONFIG_HOME/wlr-which-key/config.yaml`.";
|
||||
};
|
||||
};
|
||||
config = mkIf cfg.enable {
|
||||
xdg.configFile = {
|
||||
"wlr-which-key/config.yaml".source = yamlFormat.generate "wlr-which-key-config.yml" (filterNulls cfg.settings);
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
{
|
||||
flake.modules.homeManager.wlsunset = {
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.home.desktop.wlsunset;
|
||||
in {
|
||||
options.home.desktop.wlsunset = {
|
||||
enable = mkEnableOption "Enables wlsunset";
|
||||
latitude = mkOption {
|
||||
type = with types; nullOr (oneOf [str ints.unsigned float]);
|
||||
default = 48.5;
|
||||
};
|
||||
longitude = mkOption {
|
||||
type = with types; nullOr (oneOf [str ints.unsigned float]);
|
||||
default = 2.2;
|
||||
};
|
||||
};
|
||||
|
||||
config.services.wlsunset = mkIf cfg.enable {
|
||||
inherit (cfg) enable latitude longitude;
|
||||
};
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user