home: Modularise configuration
This commit is contained in:
parent
608f689b69
commit
9acbf395fd
15 changed files with 853 additions and 929 deletions
297
home/config/nil/bar.nix
Normal file
297
home/config/nil/bar.nix
Normal file
|
@ -0,0 +1,297 @@
|
||||||
|
{ ... }: { config, lib, pkgs, ... }@args:
|
||||||
|
let
|
||||||
|
osConfig = args.osConfig or { };
|
||||||
|
|
||||||
|
busctl = osConfig.systemd.package + /bin/busctl;
|
||||||
|
gammarelay = lib.getExe pkgs.wl-gammarelay-rs;
|
||||||
|
pwvucontrol = lib.getExe pkgs.pwvucontrol;
|
||||||
|
wpctl = osConfig.services.pipewire.wireplumber.package + /bin/wpctl;
|
||||||
|
|
||||||
|
gr = cmd: "${busctl} --user -- ${cmd} rs.wl-gammarelay / rs.wl.gammarelay";
|
||||||
|
gr-get = gr "get-property";
|
||||||
|
gr-set = gr "set-property";
|
||||||
|
gr-call = gr "call";
|
||||||
|
|
||||||
|
gr-inv = let
|
||||||
|
pkg = pkgs.writeShellApplication {
|
||||||
|
name = "gammarelay-inverted";
|
||||||
|
text = ''
|
||||||
|
state="$(${gr-get} Inverted)";
|
||||||
|
|
||||||
|
if [[ "$state" == "b false" ]]; then
|
||||||
|
echo
|
||||||
|
elif [[ "$state" == "b true" ]]; then
|
||||||
|
echo
|
||||||
|
else
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
in lib.getExe pkg;
|
||||||
|
in lib.mkIf (osConfig.hardware.graphics.enable or false) {
|
||||||
|
programs.waybar = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.waybar.override {
|
||||||
|
cavaSupport = false;
|
||||||
|
hyprlandSupport = false;
|
||||||
|
jackSupport = false;
|
||||||
|
mpdSupport = false;
|
||||||
|
sndioSupport = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
settings = {
|
||||||
|
main = {
|
||||||
|
layer = "top";
|
||||||
|
position = "bottom";
|
||||||
|
|
||||||
|
modules-left = [
|
||||||
|
"tray"
|
||||||
|
];
|
||||||
|
|
||||||
|
modules-center = [ ];
|
||||||
|
|
||||||
|
modules-right = [
|
||||||
|
"network#down"
|
||||||
|
"network#up"
|
||||||
|
"bluetooth"
|
||||||
|
"cpu"
|
||||||
|
"memory"
|
||||||
|
"memory#swap"
|
||||||
|
"temperature"
|
||||||
|
"disk"
|
||||||
|
"battery"
|
||||||
|
"idle_inhibitor"
|
||||||
|
"custom/gammarelay-temperature"
|
||||||
|
"custom/gammarelay-brightness"
|
||||||
|
"custom/gammarelay-gamma"
|
||||||
|
"custom/gammarelay-invert"
|
||||||
|
"mpris"
|
||||||
|
"pulseaudio#sink"
|
||||||
|
"pulseaudio#source"
|
||||||
|
"clock"
|
||||||
|
];
|
||||||
|
|
||||||
|
"network#down" = {
|
||||||
|
format = " {bandwidthDownBytes}";
|
||||||
|
};
|
||||||
|
|
||||||
|
"network#up" = {
|
||||||
|
format = " {bandwidthUpBytes}";
|
||||||
|
};
|
||||||
|
|
||||||
|
bluetooth = {
|
||||||
|
format-connected-battery = " {device_battery_percentage} %";
|
||||||
|
tooltip-format-connected-battery = "{device_enumerate}";
|
||||||
|
tooltip-format-enumerate-connected-battery = "{device_alias}\t{device_battery_percentage} %";
|
||||||
|
};
|
||||||
|
|
||||||
|
cpu = {
|
||||||
|
format = " {usage} %";
|
||||||
|
};
|
||||||
|
|
||||||
|
memory = {
|
||||||
|
format = " {percentage} %";
|
||||||
|
tooltip-format = "{used:0.1f} / {total:0.1f} GiB";
|
||||||
|
};
|
||||||
|
|
||||||
|
"memory#swap" = {
|
||||||
|
format = " {swapPercentage} %";
|
||||||
|
tooltip-format = "{swapUsed:0.1f} / {swapTotal:0.1f} GiB";
|
||||||
|
};
|
||||||
|
|
||||||
|
temperature = let
|
||||||
|
fmt = "{temperatureC} °C";
|
||||||
|
in {
|
||||||
|
format = " ${fmt}";
|
||||||
|
format-critical = " ${fmt}";
|
||||||
|
tooltip-format = fmt;
|
||||||
|
};
|
||||||
|
|
||||||
|
disk = {
|
||||||
|
format = " {percentage_used} %";
|
||||||
|
path = "/home";
|
||||||
|
tooltip-format = "{used} / {total}";
|
||||||
|
};
|
||||||
|
|
||||||
|
idle_inhibitor = {
|
||||||
|
format = "{icon}";
|
||||||
|
format-icons = {
|
||||||
|
activated = "";
|
||||||
|
deactivated = "";
|
||||||
|
};
|
||||||
|
|
||||||
|
timeout = 15.0;
|
||||||
|
};
|
||||||
|
|
||||||
|
"custom/gammarelay-temperature" = {
|
||||||
|
format = " {} K";
|
||||||
|
exec = "${gammarelay} watch {t}";
|
||||||
|
on-click-right = "${gr-set} Temperature q 6500";
|
||||||
|
on-scroll-up = "${gr-call} UpdateTemperature n +100";
|
||||||
|
on-scroll-down = "${gr-call} UpdateTemperature n -100";
|
||||||
|
};
|
||||||
|
|
||||||
|
"custom/gammarelay-brightness" = {
|
||||||
|
format = " {} %";
|
||||||
|
exec = "${gammarelay} watch {bp}";
|
||||||
|
on-click-right = "${gr-set} Brightness d 1";
|
||||||
|
on-scroll-up = "${gr-call} UpdateBrightness d +0.01";
|
||||||
|
on-scroll-down = "${gr-call} UpdateBrightness d -0.01";
|
||||||
|
};
|
||||||
|
|
||||||
|
"custom/gammarelay-gamma" = {
|
||||||
|
format = "γ {}";
|
||||||
|
exec = "${gammarelay} watch {g}";
|
||||||
|
on-click-right = "${gr-set} Gamma d 1";
|
||||||
|
on-scroll-up = "${gr-call} UpdateGamma d +0.01";
|
||||||
|
on-scroll-down = "${gr-call} UpdateGamma d -0.01";
|
||||||
|
};
|
||||||
|
|
||||||
|
"custom/gammarelay-invert" = {
|
||||||
|
exec = gr-inv;
|
||||||
|
exec-on-event = true;
|
||||||
|
interval = 60;
|
||||||
|
|
||||||
|
on-click = "${gr-call} ToggleInverted";
|
||||||
|
on-click-right = "${gr-set} Inverted b false";
|
||||||
|
};
|
||||||
|
|
||||||
|
battery = let
|
||||||
|
fmt = "{capacity} %";
|
||||||
|
dis = {
|
||||||
|
"5" = "";
|
||||||
|
"10" = "";
|
||||||
|
"20" = "";
|
||||||
|
"30" = "";
|
||||||
|
"40" = "";
|
||||||
|
"50" = "";
|
||||||
|
"60" = "";
|
||||||
|
"70" = "";
|
||||||
|
"80" = "";
|
||||||
|
"90" = "";
|
||||||
|
"100" = "";
|
||||||
|
};
|
||||||
|
|
||||||
|
chr = {
|
||||||
|
"5" = "";
|
||||||
|
"10" = "";
|
||||||
|
"20" = "";
|
||||||
|
"30" = "";
|
||||||
|
"40" = "";
|
||||||
|
"50" = "";
|
||||||
|
"60" = "";
|
||||||
|
"70" = "";
|
||||||
|
"80" = "";
|
||||||
|
"90" = "";
|
||||||
|
"100" = "";
|
||||||
|
};
|
||||||
|
in {
|
||||||
|
states = {
|
||||||
|
"5" = 5;
|
||||||
|
"10" = 10;
|
||||||
|
"20" = 20;
|
||||||
|
"30" = 30;
|
||||||
|
"40" = 40;
|
||||||
|
"50" = 50;
|
||||||
|
"60" = 60;
|
||||||
|
"70" = 70;
|
||||||
|
"80" = 80;
|
||||||
|
"90" = 90;
|
||||||
|
"100" = 100;
|
||||||
|
};
|
||||||
|
|
||||||
|
format-full = " ${fmt}";
|
||||||
|
format-time = "{H}:{M}";
|
||||||
|
weighted-average = true;
|
||||||
|
}
|
||||||
|
// lib.mapAttrs' (state: icon: {
|
||||||
|
name = "format-discharging-${state}";
|
||||||
|
value = "${icon} ${fmt}";
|
||||||
|
}) dis
|
||||||
|
// lib.mapAttrs' (state: icon: {
|
||||||
|
name = "format-charging-${state}";
|
||||||
|
value = "${icon} ${fmt}";
|
||||||
|
}) chr;
|
||||||
|
|
||||||
|
mpris = {
|
||||||
|
format = "{status}";
|
||||||
|
status-icons = {
|
||||||
|
playing = "";
|
||||||
|
paused = "";
|
||||||
|
stopped = "";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
"pulseaudio#sink" = let
|
||||||
|
fmt = "{volume} %";
|
||||||
|
in {
|
||||||
|
format = "{icon} ${fmt}";
|
||||||
|
format-bluetooth = " ${fmt}";
|
||||||
|
format-muted = " ${fmt}";
|
||||||
|
|
||||||
|
format-icons = {
|
||||||
|
headphone = "";
|
||||||
|
default = [ "" "" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
on-click = pwvucontrol;
|
||||||
|
on-click-right = "${wpctl} set-mute @DEFAULT_AUDIO_SINK@ toggle";
|
||||||
|
on-scroll-up = "${wpctl} set-volume @DEFAULT_AUDIO_SINK@ 1%+";
|
||||||
|
on-scroll-down = "${wpctl} set-volume @DEFAULT_AUDIO_SINK@ 1%-";
|
||||||
|
};
|
||||||
|
|
||||||
|
"pulseaudio#source" = let
|
||||||
|
fmt = "{volume} %";
|
||||||
|
in {
|
||||||
|
format = "{format_source}";
|
||||||
|
format-source = " ${fmt}";
|
||||||
|
format-source-muted = " ${fmt}";
|
||||||
|
|
||||||
|
on-click = pwvucontrol;
|
||||||
|
on-click-right = "${wpctl} set-mute @DEFAULT_AUDIO_SOURCE@ toggle";
|
||||||
|
on-scroll-up = "${wpctl} set-volume @DEFAULT_AUDIO_SOURCE@ 1%+";
|
||||||
|
on-scroll-down = "${wpctl} set-volume @DEFAULT_AUDIO_SOURCE@ 1%-";
|
||||||
|
};
|
||||||
|
|
||||||
|
clock = {
|
||||||
|
format = " {:%H:%M %Z}";
|
||||||
|
format-alt = " {:%Y-%m-%d}";
|
||||||
|
tooltip-format = "<tt><small>{calendar}</small></tt>";
|
||||||
|
calendar = {
|
||||||
|
mode = "month";
|
||||||
|
weeks-pos = "left";
|
||||||
|
on-scroll = 1;
|
||||||
|
format = {
|
||||||
|
weeks = "{:%W}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.user.services = {
|
||||||
|
waybar = {
|
||||||
|
Unit = {
|
||||||
|
PartOf = [ "graphical-session.target" ];
|
||||||
|
After = [ "graphical-session.target" ];
|
||||||
|
BindsTo = [ "tray.target" ];
|
||||||
|
Before = [ "tray.target" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
Service = {
|
||||||
|
Type = "exec";
|
||||||
|
ExecStart = lib.getExe config.programs.waybar.package;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.user.targets = {
|
||||||
|
tray = {
|
||||||
|
Unit = {
|
||||||
|
PartOf = [ "graphical-session.target" ];
|
||||||
|
After = [ "graphical-session.target" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
198
home/config/nil/desktop.nix
Normal file
198
home/config/nil/desktop.nix
Normal file
|
@ -0,0 +1,198 @@
|
||||||
|
{ ... }: { config, lib, pkgs, ... }@args:
|
||||||
|
let
|
||||||
|
osConfig = args.osConfig or { };
|
||||||
|
|
||||||
|
busctl = osConfig.systemd.package + /bin/busctl;
|
||||||
|
fish = lib.getExe osConfig.programs.fish.package;
|
||||||
|
fuzzel = lib.getExe config.programs.fuzzel.package;
|
||||||
|
kitty = lib.getExe config.programs.kitty.package;
|
||||||
|
loginctl = osConfig.systemd.package + /bin/loginctl;
|
||||||
|
playerctl = config.services.playerctld.package + /bin/playerctl;
|
||||||
|
swaylock = lib.getExe config.programs.swaylock.package;
|
||||||
|
wpctl = osConfig.services.pipewire.wireplumber.package + /bin/wpctl;
|
||||||
|
xdg-open = pkgs.xdg-utils + /bin/xdg-open;
|
||||||
|
|
||||||
|
busctl-gr = [ busctl "--user" "--" "call" "rs.wl-gammarelay" "/" "rs.wl.gammarelay" ];
|
||||||
|
|
||||||
|
niri-each-output = let
|
||||||
|
pkg = pkgs.writeShellApplication {
|
||||||
|
name = "niri-each-output";
|
||||||
|
runtimeInputs = [
|
||||||
|
config.programs.niri.package
|
||||||
|
pkgs.findutils
|
||||||
|
pkgs.jq
|
||||||
|
];
|
||||||
|
|
||||||
|
text = ''
|
||||||
|
niri msg --json outputs \
|
||||||
|
| jq --raw-output0 '. | keys | .[]' \
|
||||||
|
| xargs -0 I {} niri msg output -- {} "$1"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
in lib.getExe pkg;
|
||||||
|
in lib.mkIf (osConfig.hardware.graphics.enable or false) {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
calibre
|
||||||
|
fractal
|
||||||
|
inkscape
|
||||||
|
jellyfin-mpv-shim
|
||||||
|
keepassxc
|
||||||
|
libreoffice
|
||||||
|
obsidian
|
||||||
|
restic
|
||||||
|
signal-desktop
|
||||||
|
];
|
||||||
|
|
||||||
|
programs.fuzzel = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
main = {
|
||||||
|
prompt = "❯ ";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.niri.settings = {
|
||||||
|
prefer-no-csd = true;
|
||||||
|
|
||||||
|
input = {
|
||||||
|
keyboard = {
|
||||||
|
xkb = with config.home.keyboard; {
|
||||||
|
inherit layout;
|
||||||
|
options = options |> lib.concatStringsSep ",";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
focus-follows-mouse.enable = true;
|
||||||
|
|
||||||
|
touchpad = {
|
||||||
|
dwt = true;
|
||||||
|
dwtp = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs = {
|
||||||
|
eDP-1 = {
|
||||||
|
scale = 1;
|
||||||
|
variable-refresh-rate = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
DP-6 = {
|
||||||
|
mode = { width = 5120; height = 2160; };
|
||||||
|
scale = 1;
|
||||||
|
position = { x = 0; y = 0; };
|
||||||
|
variable-refresh-rate = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
layout = {
|
||||||
|
border.enable = lib.mkForce false;
|
||||||
|
focus-ring = {
|
||||||
|
enable = true;
|
||||||
|
width = 1;
|
||||||
|
};
|
||||||
|
|
||||||
|
default-column-width.proportion = 1. / 3.;
|
||||||
|
|
||||||
|
gaps = 5;
|
||||||
|
|
||||||
|
preset-column-widths = [
|
||||||
|
{ proportion = 1. / 3.; }
|
||||||
|
{ proportion = 1. / 2.; }
|
||||||
|
{ proportion = 2. / 3.; }
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
binds = with config.lib.niri.actions; {
|
||||||
|
"Mod+Return".action = spawn [ kitty ];
|
||||||
|
"Mod+Shift+Return".action = spawn [ kitty fish "--private" ];
|
||||||
|
"Mod+e".action = spawn [ fuzzel ];
|
||||||
|
|
||||||
|
"Mod+Up".action = focus-window-or-workspace-up;
|
||||||
|
"Mod+Down".action = focus-window-or-workspace-down;
|
||||||
|
"Mod+Left".action = focus-column-left;
|
||||||
|
"Mod+Right".action = focus-column-right;
|
||||||
|
|
||||||
|
"Mod+Ctrl+Up".action = move-window-up-or-to-workspace-up;
|
||||||
|
"Mod+Ctrl+Down".action = move-window-up-or-to-workspace-up;
|
||||||
|
"Mod+Ctrl+Left".action = move-column-left;
|
||||||
|
"Mod+Ctrl+Right".action = move-column-right;
|
||||||
|
|
||||||
|
"Mod+WheelScrollUp".action = focus-window-up-or-column-left;
|
||||||
|
"Mod+WheelScrollDown".action = focus-window-down-or-column-right;
|
||||||
|
|
||||||
|
"Mod+g".action = consume-window-into-column;
|
||||||
|
"Mod+b".action = expel-window-from-column;
|
||||||
|
|
||||||
|
"Mod+Print".action = screenshot;
|
||||||
|
"Mod+Ctrl+Print".action = screenshot-window;
|
||||||
|
"Mod+Shift+Print".action = screenshot-screen;
|
||||||
|
|
||||||
|
XF86Explorer.action = spawn [ xdg-open "https:" ];
|
||||||
|
} // lib.mapAttrs (n: v: v // { allow-when-locked = true; }) {
|
||||||
|
XF86MonBrightnessUp.action = spawn (busctl-gr ++ [ "UpdateBrightness" "d" "0.05" ]);
|
||||||
|
XF86MonBrightnessDown.action = spawn (busctl-gr ++ [ "UpdateBrightness" "d" "-0.05" ]);
|
||||||
|
XF86AudioRaiseVolume.action = spawn [ wpctl "set-volume" "@DEFAULT_AUDIO_SINK@" "+2dB" ];
|
||||||
|
XF86AudioLowerVolume.action = spawn [ wpctl "set-volume" "@DEFAULT_AUDIO_SINK@" "-2dB" ];
|
||||||
|
XF86AudioMute.action = spawn [ wpctl "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle" ];
|
||||||
|
XF86AudioMicMute.action = spawn [ wpctl "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle" ];
|
||||||
|
XF86AudioNext.action = spawn [ playerctl "next" ];
|
||||||
|
XF86AudioPrev.action = spawn [ playerctl "previous" ];
|
||||||
|
XF86AudioPlay.action = spawn [ playerctl "play" ];
|
||||||
|
XF86AudioStop.action = spawn [ playerctl "pause" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
environment = {
|
||||||
|
NIXOS_OZONE_WL = "1";
|
||||||
|
TERMINAL = kitty;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.swaylock = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.swaylock-effects;
|
||||||
|
settings = {
|
||||||
|
screenshots = true;
|
||||||
|
effect-blur = "5x3";
|
||||||
|
grace = 2;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.mako = {
|
||||||
|
enable = true;
|
||||||
|
defaultTimeout = 5000;
|
||||||
|
};
|
||||||
|
|
||||||
|
services.playerctld.enable = true;
|
||||||
|
|
||||||
|
services.swayidle = {
|
||||||
|
enable = true;
|
||||||
|
events = [
|
||||||
|
{ event = "lock"; command = "${swaylock} -f"; }
|
||||||
|
{ event = "before-sleep"; command = "${loginctl} lock-session"; }
|
||||||
|
];
|
||||||
|
|
||||||
|
timeouts = [
|
||||||
|
{
|
||||||
|
timeout = 240;
|
||||||
|
command = "${loginctl} lock-session";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
timeout = 270;
|
||||||
|
command = "${niri-each-output} off";
|
||||||
|
resumeCommand = "${niri-each-output} on";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
xdg.mimeApps.enable = true;
|
||||||
|
|
||||||
|
xdg.portal = {
|
||||||
|
enable = true;
|
||||||
|
configPackages = [ config.programs.niri.package ];
|
||||||
|
extraPortals = with pkgs; [
|
||||||
|
xdg-desktop-portal-gnome
|
||||||
|
xdg-desktop-portal-gtk
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
20
home/config/nil/fira-code.xml
Normal file
20
home/config/nil/fira-code.xml
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
|
||||||
|
<fontconfig>
|
||||||
|
<match target="font">
|
||||||
|
<test name="family" compare="eq" ignore-blanks="true">
|
||||||
|
<string>Fira Code</string>
|
||||||
|
</test>
|
||||||
|
<edit name="fontfeatures" mode="append">
|
||||||
|
<string>cv01</string>
|
||||||
|
<string>cv06</string>
|
||||||
|
<string>onum</string>
|
||||||
|
<string>ss01</string>
|
||||||
|
<string>ss03</string>
|
||||||
|
<string>ss06</string>
|
||||||
|
<string>ss07</string>
|
||||||
|
<string>ss08</string>
|
||||||
|
<string>zero</string>
|
||||||
|
</edit>
|
||||||
|
</match>
|
||||||
|
</fontconfig>
|
|
@ -243,4 +243,8 @@ in lib.mkIf (osConfig.hardware.graphics.enable or false) {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
xdg.mimeApps.defaultApplications = {
|
||||||
|
default-web-browser = [ "firefox.desktop" ];
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
68
home/config/nil/founts.nix
Normal file
68
home/config/nil/founts.nix
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
{ ... }: { config, lib, pkgs, ... }@args:
|
||||||
|
let
|
||||||
|
osConfig = args.osConfig or { };
|
||||||
|
in lib.mkIf (osConfig.hardware.graphics.enable or false) {
|
||||||
|
fonts.fontconfig = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
defaultFonts = {
|
||||||
|
sansSerif = [
|
||||||
|
"Lato"
|
||||||
|
"M PLUS 1"
|
||||||
|
"Noto Sans"
|
||||||
|
"Symbols Nerd Font"
|
||||||
|
"Unifont"
|
||||||
|
"Unifont Upper"
|
||||||
|
];
|
||||||
|
|
||||||
|
serif = [ "Noto Serif" ];
|
||||||
|
|
||||||
|
monospace = [
|
||||||
|
"Fira Code"
|
||||||
|
"M PLUS 1 Code"
|
||||||
|
"Noto Sans Mono"
|
||||||
|
"Symbols Nerd Font Mono"
|
||||||
|
];
|
||||||
|
|
||||||
|
emoji = [ "Noto Color Emoji" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
lato
|
||||||
|
fira-code
|
||||||
|
mplus-outline-fonts.githubRelease
|
||||||
|
(nerdfonts.override { fonts = [ "NerdFontsSymbolsOnly" ]; })
|
||||||
|
noto-fonts
|
||||||
|
noto-fonts-color-emoji
|
||||||
|
unifont
|
||||||
|
];
|
||||||
|
|
||||||
|
stylix.fonts = {
|
||||||
|
sansSerif = {
|
||||||
|
package = pkgs.lato;
|
||||||
|
name = "sans-serif";
|
||||||
|
};
|
||||||
|
|
||||||
|
serif = {
|
||||||
|
package = pkgs.noto-fonts;
|
||||||
|
name = "serif";
|
||||||
|
};
|
||||||
|
|
||||||
|
monospace = {
|
||||||
|
package = pkgs.fira-code;
|
||||||
|
name = "monospace";
|
||||||
|
};
|
||||||
|
|
||||||
|
emoji = {
|
||||||
|
package = pkgs.noto-fonts-color-emoji;
|
||||||
|
name = "emoji";
|
||||||
|
};
|
||||||
|
|
||||||
|
sizes = {
|
||||||
|
terminal = 11;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
xdg.configFile."fontconfig/conf.d/80-fira-code.conf".source = ./fira-code.xml;
|
||||||
|
}
|
22
home/config/nil/gammarelay.nix
Normal file
22
home/config/nil/gammarelay.nix
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
{ ... }: { config, lib, pkgs, ... }@args:
|
||||||
|
let
|
||||||
|
osConfig = args.osConfig or { };
|
||||||
|
in lib.mkIf (osConfig.hardware.graphics.enable or false) {
|
||||||
|
systemd.user.services = {
|
||||||
|
gammarelay = {
|
||||||
|
Unit = {
|
||||||
|
Description = "Display temperature and brightness control";
|
||||||
|
};
|
||||||
|
|
||||||
|
Service = {
|
||||||
|
BusName = "rs.wl-gammarelay";
|
||||||
|
ExecStart = lib.getExe pkgs.wl-gammarelay-rs;
|
||||||
|
Restart = "on-failure";
|
||||||
|
};
|
||||||
|
|
||||||
|
Install = {
|
||||||
|
WantedBy = [ "default.target" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,73 +0,0 @@
|
||||||
xkb_symbols "greedy" {
|
|
||||||
name[Group1]= "Greedy";
|
|
||||||
|
|
||||||
// Modifier keys
|
|
||||||
include "ctrl(nocaps)"
|
|
||||||
include "altwin(alt_super_win)"
|
|
||||||
include "level3(ralt_switch)"
|
|
||||||
include "level5(rctrl_switch)"
|
|
||||||
|
|
||||||
include "compose(lwin-altgr)"
|
|
||||||
include "compose(102)"
|
|
||||||
include "nbsp(level3n)"
|
|
||||||
include "keypad(future)"
|
|
||||||
|
|
||||||
key <TAB> { [ Escape ] };
|
|
||||||
key <ESC> { [ Tab ] };
|
|
||||||
|
|
||||||
key <TLDE> { [ dollar, asciitilde, EuroSign, dead_tilde ] };
|
|
||||||
key <AE01> { [ ampersand, percent, dead_breve, dead_caron ] };
|
|
||||||
key <AE02> { [ bracketleft, 7, 0x100201E, 0x100201A ] };
|
|
||||||
key <AE03> { [ braceleft, 5, 0x100201C, 0x1002018 ] };
|
|
||||||
key <AE04> { [ braceright, 3, 0x100201D, 0x1002019 ] };
|
|
||||||
key <AE05> { [ parenleft, 1, 0x1002039, NoSymbol ] };
|
|
||||||
key <AE06> { [ equal, 9, 0x1002260, NoSymbol ] };
|
|
||||||
key <AE07> { [ asterisk, 0, 0x10022C5, NoSymbol ] };
|
|
||||||
key <AE08> { [ parenright, 2, 0x100203A, NoSymbol ] };
|
|
||||||
key <AE09> { [ plus, 4, plusminus, NoSymbol ] };
|
|
||||||
key <AE10> { [ bracketright, 6, endash, emdash ] };
|
|
||||||
key <AE11> { [ exclam, 8, exclamdown, infinity ] };
|
|
||||||
key <AE12> { [ numbersign, grave, numerosign, dead_grave ] };
|
|
||||||
|
|
||||||
key <AD01> { [ k, K, odiaeresis, Odiaeresis ] };
|
|
||||||
key <AD02> { [ comma, less, dead_cedilla, guillemotleft ] };
|
|
||||||
key <AD03> { [ u, U, oacute, Oacute ] };
|
|
||||||
key <AD04> { [ y, Y, udiaeresis, Udiaeresis ] };
|
|
||||||
key <AD05> { [ p, P, NoSymbol, NoSymbol ] };
|
|
||||||
key <AD06> { [ w, W, NoSymbol, NoSymbol ] };
|
|
||||||
key <AD07> { [ l, L, NoSymbol, NoSymbol ] };
|
|
||||||
key <AD08> { [ m, M, mu, NoSymbol ] };
|
|
||||||
key <AD09> { [ f, F, NoSymbol, NoSymbol ] };
|
|
||||||
key <AD10> { [ c, C, copyright, NoSymbol ] };
|
|
||||||
key <AD11> { [ slash, question, division, questiondown ] };
|
|
||||||
key <AD12> { [ at, asciicircum, 0x100203D, dead_circumflex ] };
|
|
||||||
|
|
||||||
key <AC01> { [ o, O, oacute, Oacute ] };
|
|
||||||
key <AC02> { [ a, A, aacute, Aacute ] };
|
|
||||||
key <AC03> { [ e, E, eacute, Eacute ] };
|
|
||||||
key <AC04> { [ i, I, iacute, Iacute ] };
|
|
||||||
key <AC05> { [ d, D, eth, ETH ] };
|
|
||||||
key <AC06> { [ r, R, NoSymbol, NoSymbol ] };
|
|
||||||
key <AC07> { [ n, N, ntilde, Ntilde ] };
|
|
||||||
key <AC08> { [ t, T, thorn, Thorn ] };
|
|
||||||
key <AC09> { [ h, H, NoSymbol, NoSymbol ] };
|
|
||||||
key <AC10> { [ s, S, ssharp, section ] };
|
|
||||||
key <AC11> { [ minus, underscore, 0x1002010, dead_macron ] };
|
|
||||||
key <BKSL> { [ backslash, bar, NoSymbol, NoSymbol ] };
|
|
||||||
|
|
||||||
key <AB01> { [ q, Q, adiaeresis, Adiaeresis ] };
|
|
||||||
key <AB02> { [ period, greater, ellipsis, guillemotright ] };
|
|
||||||
key <AB03> { [ apostrophe, quotedbl, dead_acute, dead_diaeresis ] };
|
|
||||||
key <AB04> { [ semicolon, colon, periodcentered, NoSymbol ] };
|
|
||||||
key <AB05> { [ z, Z, NoSymbol, NoSymbol ] };
|
|
||||||
key <AB06> { [ x, X, multiply, NoSymbol ] };
|
|
||||||
key <AB07> { [ v, V, NoSymbol, NoSymbol ] };
|
|
||||||
key <AB08> { [ g, G, NoSymbol, NoSymbol ] };
|
|
||||||
key <AB09> { [ b, B, NoSymbol, NoSymbol ] };
|
|
||||||
key <AB10> { [ j, J, NoSymbol, NoSymbol ] };
|
|
||||||
|
|
||||||
key <UP> { [ Up, NoSymbol, uparrow, 0x10021D1 ] };
|
|
||||||
key <LEFT> { [ Left, NoSymbol, leftarrow, 0x10021D0 ] };
|
|
||||||
key <DOWN> { [ Down, NoSymbol, downarrow, 0x10021D3 ] };
|
|
||||||
key <RGHT> { [ Right, NoSymbol, rightarrow, 0x10021D2 ] };
|
|
||||||
};
|
|
|
@ -4,6 +4,7 @@ let
|
||||||
in {
|
in {
|
||||||
imports = [
|
imports = [
|
||||||
nur.hmModules.nur
|
nur.hmModules.nur
|
||||||
|
self.homeModules.greedy
|
||||||
self.homeModules.locale-en_EU
|
self.homeModules.locale-en_EU
|
||||||
nix-index-database.hmModules.nix-index
|
nix-index-database.hmModules.nix-index
|
||||||
stylix.homeManagerModules.stylix
|
stylix.homeManagerModules.stylix
|
||||||
|
@ -11,8 +12,16 @@ in {
|
||||||
niri.homeModules.config
|
niri.homeModules.config
|
||||||
niri.homeModules.stylix
|
niri.homeModules.stylix
|
||||||
] ++ self.lib.mods [
|
] ++ self.lib.mods [
|
||||||
|
./gammarelay.nix
|
||||||
|
./founts.nix
|
||||||
|
./stylix.nix
|
||||||
|
./desktop.nix
|
||||||
|
./bar.nix
|
||||||
|
./terminal.nix
|
||||||
./firefox.nix
|
./firefox.nix
|
||||||
./wayland.nix
|
./thunderbird.nix
|
||||||
|
./sioyek.nix
|
||||||
|
./texlive.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
home.stateVersion = "24.11";
|
home.stateVersion = "24.11";
|
||||||
|
|
57
home/config/nil/mpv.nix
Normal file
57
home/config/nil/mpv.nix
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
{ ... }: { config, lib, pkgs, ... }@args:
|
||||||
|
let
|
||||||
|
osConfig = args.osConfig or { };
|
||||||
|
in lib.mkIf (osConfig.hardware.graphics.enable or false) {
|
||||||
|
programs.mpv = {
|
||||||
|
enable = true;
|
||||||
|
defaultProfiles = [ "high-quality" ];
|
||||||
|
config = {
|
||||||
|
#access-references = false;
|
||||||
|
|
||||||
|
# Video output
|
||||||
|
vo = "gpu";
|
||||||
|
#gpu-api = "vulkan";
|
||||||
|
hwdec = "vulkan,vaapi,auto-safe";
|
||||||
|
vd-lavc-dr = true;
|
||||||
|
|
||||||
|
scale = "ewa_lanczos4sharpest";
|
||||||
|
cscale = "spline64";
|
||||||
|
dscale = "mitchell";
|
||||||
|
tscale = "oversample";
|
||||||
|
|
||||||
|
# A/V sync
|
||||||
|
video-sync = "display-resample";
|
||||||
|
interpolation = true;
|
||||||
|
|
||||||
|
# Audio
|
||||||
|
volume = 100;
|
||||||
|
volume-max = 100;
|
||||||
|
|
||||||
|
# Subtitles
|
||||||
|
sub-auto = "fuzzy";
|
||||||
|
|
||||||
|
# Screenshots
|
||||||
|
screenshot-format = "avif";
|
||||||
|
|
||||||
|
# Cache
|
||||||
|
demuxer-max-bytes = "768MiB";
|
||||||
|
demuxer-max-back-bytes = "256MiB";
|
||||||
|
};
|
||||||
|
|
||||||
|
profiles = {
|
||||||
|
highres = {
|
||||||
|
scale = "spline64";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
scripts = with pkgs.mpvScripts; [
|
||||||
|
mpris
|
||||||
|
autocrop
|
||||||
|
autodeint
|
||||||
|
];
|
||||||
|
|
||||||
|
scriptOpts = {
|
||||||
|
autocrop.auto = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
20
home/config/nil/sioyek.nix
Normal file
20
home/config/nil/sioyek.nix
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
{ ... }: { config, lib, ... }@args:
|
||||||
|
let
|
||||||
|
osConfig = args.osConfig or { };
|
||||||
|
in lib.mkIf (osConfig.hardware.graphics.enable or false) {
|
||||||
|
programs.sioyek = {
|
||||||
|
enable = true;
|
||||||
|
bindings = {
|
||||||
|
"command" = "-";
|
||||||
|
|
||||||
|
"move_up" = [ "<up>" "t" ];
|
||||||
|
"move_down" = [ "<down>" "n" ];
|
||||||
|
"move_left" = [ "<right>" "h" ];
|
||||||
|
"move_right" = [ "<left>" "r" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
xdg.mimeApps.defaultApplications = {
|
||||||
|
"application/pdf" = [ "sioyek.desktop" ];
|
||||||
|
};
|
||||||
|
}
|
8
home/config/nil/stylix.nix
Normal file
8
home/config/nil/stylix.nix
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
{ ... }: { config, lib, pkgs, ... }: {
|
||||||
|
stylix = {
|
||||||
|
enable = true;
|
||||||
|
base16Scheme = "${pkgs.base16-schemes}/share/themes/catppuccin-macchiato.yaml";
|
||||||
|
image = ./wallpaper.png;
|
||||||
|
polarity = "dark";
|
||||||
|
};
|
||||||
|
}
|
97
home/config/nil/terminal.nix
Normal file
97
home/config/nil/terminal.nix
Normal file
|
@ -0,0 +1,97 @@
|
||||||
|
{ ... }: { config, lib, pkgs, ... }@args:
|
||||||
|
let
|
||||||
|
osConfig = args.osConfig or { };
|
||||||
|
|
||||||
|
mdless = pkgs.mdcat + /bin/mdless;
|
||||||
|
mpv = lib.getExe config.programs.mpv.package;
|
||||||
|
xdg-open = pkgs.xdg-utils + /bin/xdg-open;
|
||||||
|
in lib.mkIf (osConfig.hardware.graphics.enable or false) {
|
||||||
|
programs.eza.extraOptions = lib.mkAfter [ "--hyperlink" ];
|
||||||
|
|
||||||
|
programs.kitty = {
|
||||||
|
enable = true;
|
||||||
|
theme = "Catppuccin-Mocha";
|
||||||
|
settings = {
|
||||||
|
disable_ligatures = "cursor";
|
||||||
|
|
||||||
|
cursor_blink_interval = 0;
|
||||||
|
|
||||||
|
scrollback_lines = 65536;
|
||||||
|
scrollback_fill_enlarged_window = true;
|
||||||
|
|
||||||
|
enable_audio_bell = false;
|
||||||
|
|
||||||
|
close_on_child_death = true;
|
||||||
|
|
||||||
|
clear_all_shortcuts = true;
|
||||||
|
|
||||||
|
# Mouse
|
||||||
|
click_interval = "0.2";
|
||||||
|
};
|
||||||
|
|
||||||
|
keybindings = {
|
||||||
|
"ctrl+shift+c" = "copy_to_clipboard";
|
||||||
|
"ctrl+shift+v" = "paste_from_clipboard";
|
||||||
|
"ctrl+shift+s" = "paste_from_selection";
|
||||||
|
"shift+insert" = "paste_from_selection";
|
||||||
|
"ctrl+up" = "scroll_line_up";
|
||||||
|
"ctrl+down" = "scroll_line_down";
|
||||||
|
"ctrl+page_up" = "scroll_page_up";
|
||||||
|
"ctrl+page_down" = "scroll_page_down";
|
||||||
|
"shift+page_up" = "scroll_page_up";
|
||||||
|
"shift+page_down" = "scroll_page_down";
|
||||||
|
"ctrl+home" = "scroll_home";
|
||||||
|
"ctrl+end" = "scroll_end";
|
||||||
|
"ctrl+print_screen" = "show_scrollback";
|
||||||
|
|
||||||
|
"ctrl+equal" = "change_font_size all 0";
|
||||||
|
"ctrl+plus" = "change_font_size all +1";
|
||||||
|
"ctrl+minus" = "change_font_size all -1";
|
||||||
|
|
||||||
|
"ctrl+shift+u" = "kitten unicode_input";
|
||||||
|
};
|
||||||
|
|
||||||
|
extraConfig = let
|
||||||
|
mouse = {
|
||||||
|
"left click ungrabbed" = "mouse_handle_click selection prompt";
|
||||||
|
"ctrl+left click ungrabbed" = "mouse_handle_click link";
|
||||||
|
|
||||||
|
"left press ungrabbed" = "mouse_selection normal";
|
||||||
|
"shift+left press ungrabbed" = "mouse_selection line";
|
||||||
|
"ctrl+left press ungrabbed" = "mouse_selection rectangle";
|
||||||
|
|
||||||
|
"left doublepress ungrabbed" = "mouse_selection word";
|
||||||
|
"left triplepress ungrabbed" = " mouse_selection line";
|
||||||
|
} |> lib.mapAttrsToList (n: v: "mouse_map ${n} ${v}\n")
|
||||||
|
|> lib.concatStrings;
|
||||||
|
in ''
|
||||||
|
clear_all_mouse_actions yes
|
||||||
|
${mouse}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
xdg.configFile."kitty/open-actions.conf".text = ''
|
||||||
|
protocol file
|
||||||
|
mime image/*
|
||||||
|
action launch --type overlay kitten icat --hold -- "$FILE_PATH"
|
||||||
|
|
||||||
|
protocol file
|
||||||
|
mime text/markdown
|
||||||
|
action launch --type overlay ${mdless} -- "$FILE_PATH"
|
||||||
|
|
||||||
|
protocol file
|
||||||
|
mime text/*
|
||||||
|
action launch --type overlay $EDITOR -- "$FILE_PATH"
|
||||||
|
|
||||||
|
protocol file
|
||||||
|
mime video/*
|
||||||
|
action launch --type background ${mpv} -- "$FILE_PATH"
|
||||||
|
|
||||||
|
protocol file
|
||||||
|
mime audio/*
|
||||||
|
action launch --type overlay ${mpv} -- "$FILE_PATH"
|
||||||
|
|
||||||
|
protocol
|
||||||
|
action launch --type background ${xdg-open} "$FILE_PATH"
|
||||||
|
'';
|
||||||
|
}
|
42
home/config/nil/texlive.nix
Normal file
42
home/config/nil/texlive.nix
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
{ ... }: { config, lib, ... }@args:
|
||||||
|
let
|
||||||
|
osConfig = args.osConfig or { };
|
||||||
|
in lib.mkIf (osConfig.hardware.graphics.enable or false) {
|
||||||
|
programs.texlive = {
|
||||||
|
enable = true;
|
||||||
|
extraPackages = tpkgs: {
|
||||||
|
inherit (tpkgs)
|
||||||
|
texlive-scripts
|
||||||
|
|
||||||
|
xelatex-dev
|
||||||
|
fontspec
|
||||||
|
polyglossia
|
||||||
|
|
||||||
|
hyphen-english
|
||||||
|
hyphen-french
|
||||||
|
hyphen-german
|
||||||
|
hyphen-portuguese
|
||||||
|
hyphen-spanish
|
||||||
|
|
||||||
|
koma-script
|
||||||
|
|
||||||
|
amsmath
|
||||||
|
bookmark
|
||||||
|
booktabs
|
||||||
|
csquotes
|
||||||
|
hyperref
|
||||||
|
multirow
|
||||||
|
paralist
|
||||||
|
preprint
|
||||||
|
realscripts
|
||||||
|
textpos
|
||||||
|
unicode-math
|
||||||
|
units
|
||||||
|
xecjk
|
||||||
|
xecolor
|
||||||
|
xltxtra
|
||||||
|
xtab
|
||||||
|
;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
10
home/config/nil/thunderbird.nix
Normal file
10
home/config/nil/thunderbird.nix
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
{ ... }: { config, lib, pkgs, ... }@args:
|
||||||
|
let
|
||||||
|
osConfig = args.osConfig or { };
|
||||||
|
in lib.mkIf (osConfig.hardware.graphics.enable or false) {
|
||||||
|
programs.thunderbird = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.thunderbird;
|
||||||
|
profiles = { };
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,855 +0,0 @@
|
||||||
{ ... }: { config, lib, pkgs, ... }@args:
|
|
||||||
let
|
|
||||||
osConfig = args.osConfig or { };
|
|
||||||
|
|
||||||
fira-code-features = [
|
|
||||||
"cv01"
|
|
||||||
"cv06"
|
|
||||||
"onum"
|
|
||||||
"ss01"
|
|
||||||
"ss03"
|
|
||||||
"ss06"
|
|
||||||
"ss07"
|
|
||||||
"ss08"
|
|
||||||
"zero"
|
|
||||||
];
|
|
||||||
|
|
||||||
cmd = {
|
|
||||||
brightnessctl = "${pkgs.brightnessctl}/bin/brightnessctl";
|
|
||||||
fish = "${osConfig.programs.fish.package}/bin/fish";
|
|
||||||
fuzzel = "${config.programs.fuzzel.package}/bin/fuzzel";
|
|
||||||
grim = "${pkgs.grim}/bin/grim -l 9";
|
|
||||||
jq = "${config.programs.jq.package}/bin/jq";
|
|
||||||
keepassxc = "${pkgs.keepassxc}/bin/keepassxc";
|
|
||||||
kill = "${pkgs.procps}/bin/kill";
|
|
||||||
kitty = ''${config.programs.kitty.package}/bin/kitty --single-instance --instance-group "$XDG_SESSION_ID"'';
|
|
||||||
loginctl = "${osConfig.systemd.package}/bin/loginctl";
|
|
||||||
mdless = "${pkgs.mdcat}/bin/mdless";
|
|
||||||
mpv = "${config.programs.mpv.package}/bin/mpv";
|
|
||||||
pidof = "${pkgs.procps}/bin/pidof";
|
|
||||||
playerctl = "${pkgs.playerctl}/bin/playerctl";
|
|
||||||
pwvucontrol = "${pkgs.pwvucontrol}/bin/pwvucontrol";
|
|
||||||
slurp = "${pkgs.slurp}/bin/slurp";
|
|
||||||
swaylock = "${config.programs.swaylock.package}/bin/swaylock";
|
|
||||||
waybar = "${config.programs.waybar.package}/bin/waybar";
|
|
||||||
wl-copy = "${pkgs.wl-clipboard}/bin/wl-copy";
|
|
||||||
wpctl = "${osConfig.services.pipewire.wireplumber.package}/bin/wpctl";
|
|
||||||
xargs = "${pkgs.findutils}/bin/xargs";
|
|
||||||
xdg-open = "${pkgs.xdg-utils}/bin/xdg-open";
|
|
||||||
};
|
|
||||||
in lib.mkIf (osConfig.hardware.graphics.enable or false) {
|
|
||||||
fonts.fontconfig = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
defaultFonts = {
|
|
||||||
sansSerif = [
|
|
||||||
"Lato"
|
|
||||||
"M PLUS 1"
|
|
||||||
"Noto Sans"
|
|
||||||
"Symbols Nerd Font"
|
|
||||||
"Unifont"
|
|
||||||
"Unifont Upper"
|
|
||||||
];
|
|
||||||
|
|
||||||
serif = [ "Noto Serif"];
|
|
||||||
|
|
||||||
monospace = [
|
|
||||||
"Fira Code"
|
|
||||||
"M PLUS 1 Code"
|
|
||||||
"Noto Sans Mono"
|
|
||||||
"Symbols Nerd Font Mono"
|
|
||||||
];
|
|
||||||
|
|
||||||
emoji = [ "Noto Color Emoji" ];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
home.file.".xkb/symbols/greedy".source = ./greedy.xkb;
|
|
||||||
|
|
||||||
home.keyboard = {
|
|
||||||
layout = "greedy";
|
|
||||||
options = [ "ctrl:nocaps" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
# Founts
|
|
||||||
lato
|
|
||||||
fira-code
|
|
||||||
mplus-outline-fonts.githubRelease
|
|
||||||
(nerdfonts.override { fonts = [ "NerdFontsSymbolsOnly" ]; })
|
|
||||||
noto-fonts
|
|
||||||
noto-fonts-color-emoji
|
|
||||||
unifont
|
|
||||||
|
|
||||||
# Image processing
|
|
||||||
oxipng
|
|
||||||
|
|
||||||
# Documentation
|
|
||||||
linux-manual
|
|
||||||
man-pages
|
|
||||||
man-pages-posix
|
|
||||||
|
|
||||||
# System operations
|
|
||||||
restic
|
|
||||||
|
|
||||||
# Cryptography
|
|
||||||
rage
|
|
||||||
|
|
||||||
# Messaging
|
|
||||||
fractal
|
|
||||||
signal-desktop
|
|
||||||
|
|
||||||
# Audio control
|
|
||||||
pwvucontrol
|
|
||||||
|
|
||||||
inkscape
|
|
||||||
obsidian
|
|
||||||
|
|
||||||
kicad
|
|
||||||
calibre
|
|
||||||
keepassxc
|
|
||||||
|
|
||||||
# Multimedia
|
|
||||||
jellyfin-mpv-shim
|
|
||||||
|
|
||||||
libreoffice
|
|
||||||
];
|
|
||||||
|
|
||||||
programs.beets = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
directory = "~/msc";
|
|
||||||
import.reflink = "auto";
|
|
||||||
|
|
||||||
plugins = [
|
|
||||||
"chroma"
|
|
||||||
"spotify"
|
|
||||||
"fromfilename"
|
|
||||||
|
|
||||||
"fetchart"
|
|
||||||
"lyrics"
|
|
||||||
"replaygain"
|
|
||||||
|
|
||||||
"duplicates"
|
|
||||||
"hook"
|
|
||||||
];
|
|
||||||
|
|
||||||
hook.hooks = [
|
|
||||||
{
|
|
||||||
event = "import";
|
|
||||||
command = "systemctl --user start mopidy-scan.service";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.eza.extraOptions = lib.mkAfter [ "--hyperlink" ];
|
|
||||||
|
|
||||||
programs.fuzzel = {
|
|
||||||
enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.imv.enable = true;
|
|
||||||
|
|
||||||
programs.kitty = {
|
|
||||||
enable = true;
|
|
||||||
theme = "Catppuccin-Mocha";
|
|
||||||
settings = {
|
|
||||||
disable_ligatures = "cursor";
|
|
||||||
|
|
||||||
cursor_blink_interval = 0;
|
|
||||||
|
|
||||||
scrollback_lines = 65536;
|
|
||||||
scrollback_fill_enlarged_window = true;
|
|
||||||
|
|
||||||
enable_audio_bell = false;
|
|
||||||
|
|
||||||
close_on_child_death = true;
|
|
||||||
|
|
||||||
clear_all_shortcuts = true;
|
|
||||||
|
|
||||||
# Mouse
|
|
||||||
click_interval = "0.2";
|
|
||||||
};
|
|
||||||
|
|
||||||
keybindings = {
|
|
||||||
"ctrl+shift+c" = "copy_to_clipboard";
|
|
||||||
"ctrl+shift+v" = "paste_from_clipboard";
|
|
||||||
"ctrl+shift+s" = "paste_from_selection";
|
|
||||||
"shift+insert" = "paste_from_selection";
|
|
||||||
"ctrl+up" = "scroll_line_up";
|
|
||||||
"ctrl+down" = "scroll_line_down";
|
|
||||||
"ctrl+page_up" = "scroll_page_up";
|
|
||||||
"ctrl+page_down" = "scroll_page_down";
|
|
||||||
"shift+page_up" = "scroll_page_up";
|
|
||||||
"shift+page_down" = "scroll_page_down";
|
|
||||||
"ctrl+home" = "scroll_home";
|
|
||||||
"ctrl+end" = "scroll_end";
|
|
||||||
"ctrl+print_screen" = "show_scrollback";
|
|
||||||
|
|
||||||
"ctrl+equal" = "change_font_size all 0";
|
|
||||||
"ctrl+plus" = "change_font_size all +1";
|
|
||||||
"ctrl+minus" = "change_font_size all -1";
|
|
||||||
|
|
||||||
"ctrl+shift+u" = "kitten unicode_input";
|
|
||||||
};
|
|
||||||
|
|
||||||
extraConfig = let
|
|
||||||
mouse = {
|
|
||||||
"left click ungrabbed" = "mouse_handle_click selection prompt";
|
|
||||||
"ctrl+left click ungrabbed" = "mouse_handle_click link";
|
|
||||||
|
|
||||||
"left press ungrabbed" = "mouse_selection normal";
|
|
||||||
"shift+left press ungrabbed" = "mouse_selection line";
|
|
||||||
"ctrl+left press ungrabbed" = "mouse_selection rectangle";
|
|
||||||
|
|
||||||
"left doublepress ungrabbed" = "mouse_selection word";
|
|
||||||
"left triplepress ungrabbed" = " mouse_selection line";
|
|
||||||
} |> lib.mapAttrsToList (n: v: "mouse_map ${n} ${v}\n")
|
|
||||||
|> lib.concatStrings;
|
|
||||||
in ''
|
|
||||||
clear_all_mouse_actions yes
|
|
||||||
${mouse}
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.mpv = {
|
|
||||||
enable = true;
|
|
||||||
defaultProfiles = [ "high-quality" ];
|
|
||||||
config = {
|
|
||||||
#access-references = false;
|
|
||||||
|
|
||||||
# Video output
|
|
||||||
vo = "gpu";
|
|
||||||
#gpu-api = "vulkan";
|
|
||||||
hwdec = "vulkan,vaapi,auto-safe";
|
|
||||||
vd-lavc-dr = true;
|
|
||||||
|
|
||||||
scale = "ewa_lanczos4sharpest";
|
|
||||||
cscale = "spline64";
|
|
||||||
dscale = "mitchell";
|
|
||||||
tscale = "oversample";
|
|
||||||
|
|
||||||
# A/V sync
|
|
||||||
video-sync = "display-resample";
|
|
||||||
interpolation = true;
|
|
||||||
|
|
||||||
# Audio
|
|
||||||
volume = 100;
|
|
||||||
volume-max = 100;
|
|
||||||
|
|
||||||
# Subtitles
|
|
||||||
sub-auto = "fuzzy";
|
|
||||||
|
|
||||||
# Screenshots
|
|
||||||
screenshot-format = "avif";
|
|
||||||
|
|
||||||
# Cache
|
|
||||||
demuxer-max-bytes = "768MiB";
|
|
||||||
demuxer-max-back-bytes = "256MiB";
|
|
||||||
};
|
|
||||||
|
|
||||||
profiles = {
|
|
||||||
highres = {
|
|
||||||
scale = "spline64";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
scripts = with pkgs.mpvScripts; [
|
|
||||||
mpris
|
|
||||||
autocrop
|
|
||||||
autodeint
|
|
||||||
];
|
|
||||||
|
|
||||||
scriptOpts = {
|
|
||||||
autocrop.auto = false;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.niri = {
|
|
||||||
settings = {
|
|
||||||
prefer-no-csd = true;
|
|
||||||
|
|
||||||
input = {
|
|
||||||
keyboard = {
|
|
||||||
xkb = with config.home.keyboard; {
|
|
||||||
inherit layout;
|
|
||||||
options = lib.concatStringsSep "," options;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
focus-follows-mouse.enable = true;
|
|
||||||
|
|
||||||
touchpad = {
|
|
||||||
dwt = true;
|
|
||||||
dwtp = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
outputs = {
|
|
||||||
eDP-1 = {
|
|
||||||
scale = 1;
|
|
||||||
variable-refresh-rate = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
DP-6 = {
|
|
||||||
mode = { width = 5120; height = 2160; };
|
|
||||||
scale = 1;
|
|
||||||
position = { x = 0; y = 0; };
|
|
||||||
variable-refresh-rate = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
layout = {
|
|
||||||
border.enable = lib.mkForce false;
|
|
||||||
focus-ring = {
|
|
||||||
enable = true;
|
|
||||||
width = 1;
|
|
||||||
};
|
|
||||||
|
|
||||||
default-column-width.proportion = 1. / 3.;
|
|
||||||
|
|
||||||
gaps = 5;
|
|
||||||
|
|
||||||
preset-column-widths = [
|
|
||||||
{ proportion = 1. / 3.; }
|
|
||||||
{ proportion = 1. / 2.; }
|
|
||||||
{ proportion = 2. / 3.; }
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
binds = with config.lib.niri.actions; with cmd; lib.mkOptionDefault {
|
|
||||||
"Mod+Return".action = spawn "kitty";
|
|
||||||
"Mod+Shift+Return".action = spawn "${kitty} fish --private";
|
|
||||||
"Mod+e".action = spawn "${fuzzel}";
|
|
||||||
|
|
||||||
"Mod+Up".action = focus-window-or-workspace-up;
|
|
||||||
"Mod+Down".action = focus-window-or-workspace-down;
|
|
||||||
"Mod+Left".action = focus-column-left;
|
|
||||||
"Mod+Right".action = focus-column-right;
|
|
||||||
|
|
||||||
"Mod+Ctrl+Up".action = move-window-up-or-to-workspace-up;
|
|
||||||
"Mod+Ctrl+Down".action = move-window-up-or-to-workspace-up;
|
|
||||||
"Mod+Ctrl+Left".action = move-column-left;
|
|
||||||
"Mod+Ctrl+Right".action = move-column-right;
|
|
||||||
|
|
||||||
"Mod+WheelScrollUp".action = focus-window-up-or-column-left;
|
|
||||||
"Mod+WheelScrollDown".action = focus-window-down-or-column-right;
|
|
||||||
|
|
||||||
"Mod+g".action = consume-window-into-column;
|
|
||||||
"Mod+b".action = expel-window-from-column;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.sioyek = {
|
|
||||||
enable = true;
|
|
||||||
bindings = {
|
|
||||||
"command" = "-";
|
|
||||||
|
|
||||||
"move_up" = [ "<up>" "t" ];
|
|
||||||
"move_down" = [ "<down>" "n" ];
|
|
||||||
"move_left" = [ "<right>" "h" ];
|
|
||||||
"move_right" = [ "<left>" "r" ];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.swaylock = {
|
|
||||||
enable = true;
|
|
||||||
package = pkgs.swaylock-effects;
|
|
||||||
settings = {
|
|
||||||
screenshots = true;
|
|
||||||
effect-blur = "5x3";
|
|
||||||
grace = 2;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.texlive = {
|
|
||||||
enable = true;
|
|
||||||
extraPackages = tpkgs: {
|
|
||||||
inherit (tpkgs)
|
|
||||||
texlive-scripts
|
|
||||||
|
|
||||||
xelatex-dev
|
|
||||||
fontspec
|
|
||||||
polyglossia
|
|
||||||
|
|
||||||
hyphen-english
|
|
||||||
hyphen-french
|
|
||||||
hyphen-german
|
|
||||||
hyphen-portuguese
|
|
||||||
hyphen-spanish
|
|
||||||
|
|
||||||
koma-script
|
|
||||||
|
|
||||||
amsmath
|
|
||||||
bookmark
|
|
||||||
booktabs
|
|
||||||
csquotes
|
|
||||||
hyperref
|
|
||||||
multirow
|
|
||||||
paralist
|
|
||||||
preprint
|
|
||||||
realscripts
|
|
||||||
textpos
|
|
||||||
unicode-math
|
|
||||||
units
|
|
||||||
xecjk
|
|
||||||
xecolor
|
|
||||||
xltxtra
|
|
||||||
xtab
|
|
||||||
;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.thunderbird = {
|
|
||||||
enable = true;
|
|
||||||
package = pkgs.thunderbird;
|
|
||||||
profiles = { };
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.tofi = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
history = true;
|
|
||||||
fuzzy-match = true;
|
|
||||||
num-results = 8;
|
|
||||||
|
|
||||||
font = pkgs.runCommand "fount-path" {
|
|
||||||
preferLocal = true;
|
|
||||||
nativeBuildInputs = with pkgs; [ fontconfig fira-code ];
|
|
||||||
} ''
|
|
||||||
fc-match -f "%{file}" "Fira Code" >"$out"
|
|
||||||
'' |> builtins.readFile |> lib.mkForce;
|
|
||||||
|
|
||||||
font-size = lib.mkForce 14;
|
|
||||||
font-features = fira-code-features |> lib.concatStringsSep ",";
|
|
||||||
font-variations = "wght 450";
|
|
||||||
font-hint = true;
|
|
||||||
|
|
||||||
anchor = "top";
|
|
||||||
horizontal = true;
|
|
||||||
|
|
||||||
width = "100%";
|
|
||||||
height = 30;
|
|
||||||
|
|
||||||
min-input-width = 120;
|
|
||||||
result-spacing = 20;
|
|
||||||
|
|
||||||
border-width = 0;
|
|
||||||
outline-width = 0;
|
|
||||||
|
|
||||||
padding-top = 4;
|
|
||||||
padding-bottom = 4;
|
|
||||||
padding-left = 12;
|
|
||||||
padding-right = 12;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.waybar = {
|
|
||||||
enable = true;
|
|
||||||
package = pkgs.waybar.override {
|
|
||||||
cavaSupport = false;
|
|
||||||
hyprlandSupport = false;
|
|
||||||
jackSupport = false;
|
|
||||||
mpdSupport = false;
|
|
||||||
sndioSupport = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
settings = {
|
|
||||||
main = {
|
|
||||||
layer = "top";
|
|
||||||
position = "bottom";
|
|
||||||
|
|
||||||
modules-left = [
|
|
||||||
"tray"
|
|
||||||
];
|
|
||||||
|
|
||||||
modules-center = [ ];
|
|
||||||
|
|
||||||
modules-right = [
|
|
||||||
"network#down"
|
|
||||||
"network#up"
|
|
||||||
"bluetooth"
|
|
||||||
"cpu"
|
|
||||||
"memory"
|
|
||||||
"memory#swap"
|
|
||||||
"temperature"
|
|
||||||
"disk"
|
|
||||||
"battery"
|
|
||||||
"idle_inhibitor"
|
|
||||||
"backlight"
|
|
||||||
"mpris"
|
|
||||||
"pulseaudio#sink"
|
|
||||||
"pulseaudio#source"
|
|
||||||
"clock"
|
|
||||||
];
|
|
||||||
|
|
||||||
ipc = true;
|
|
||||||
|
|
||||||
"network#down" = {
|
|
||||||
format = " {bandwidthDownBytes}";
|
|
||||||
};
|
|
||||||
|
|
||||||
"network#up" = {
|
|
||||||
format = " {bandwidthUpBytes}";
|
|
||||||
};
|
|
||||||
|
|
||||||
bluetooth = {
|
|
||||||
format-connected-battery = " {device_battery_percentage} %";
|
|
||||||
tooltip-format-connected-battery = "{device_enumerate}";
|
|
||||||
tooltip-format-enumerate-connected-battery = "{device_alias}\t{device_battery_percentage} %";
|
|
||||||
};
|
|
||||||
|
|
||||||
cpu = {
|
|
||||||
format = " {usage} %";
|
|
||||||
};
|
|
||||||
|
|
||||||
memory = {
|
|
||||||
format = " {percentage} %";
|
|
||||||
tooltip-format = "{used:0.1f} / {total:0.1f} GiB";
|
|
||||||
};
|
|
||||||
|
|
||||||
"memory#swap" = {
|
|
||||||
format = " {swapPercentage} %";
|
|
||||||
tooltip-format = "{swapUsed:0.1f} / {swapTotal:0.1f} GiB";
|
|
||||||
};
|
|
||||||
|
|
||||||
temperature = let
|
|
||||||
fmt = "{temperatureC} °C";
|
|
||||||
in {
|
|
||||||
format = " ${fmt}";
|
|
||||||
format-critical = " ${fmt}";
|
|
||||||
tooltip-format = fmt;
|
|
||||||
};
|
|
||||||
|
|
||||||
disk = {
|
|
||||||
format = " {percentage_used} %";
|
|
||||||
path = "/home";
|
|
||||||
tooltip-format = "{used} / {total}";
|
|
||||||
};
|
|
||||||
|
|
||||||
idle_inhibitor = {
|
|
||||||
format = "{icon}";
|
|
||||||
format-icons = {
|
|
||||||
activated = "";
|
|
||||||
deactivated = "";
|
|
||||||
};
|
|
||||||
|
|
||||||
timeout = 15.0;
|
|
||||||
};
|
|
||||||
|
|
||||||
battery = let
|
|
||||||
fmt = "{capacity} %";
|
|
||||||
dis = {
|
|
||||||
"5" = "";
|
|
||||||
"10" = "";
|
|
||||||
"20" = "";
|
|
||||||
"30" = "";
|
|
||||||
"40" = "";
|
|
||||||
"50" = "";
|
|
||||||
"60" = "";
|
|
||||||
"70" = "";
|
|
||||||
"80" = "";
|
|
||||||
"90" = "";
|
|
||||||
"100" = "";
|
|
||||||
};
|
|
||||||
chr = {
|
|
||||||
"5" = "";
|
|
||||||
"10" = "";
|
|
||||||
"20" = "";
|
|
||||||
"30" = "";
|
|
||||||
"40" = "";
|
|
||||||
"50" = "";
|
|
||||||
"60" = "";
|
|
||||||
"70" = "";
|
|
||||||
"80" = "";
|
|
||||||
"90" = "";
|
|
||||||
"100" = "";
|
|
||||||
};
|
|
||||||
in {
|
|
||||||
states = {
|
|
||||||
"5" = 5;
|
|
||||||
"10" = 10;
|
|
||||||
"20" = 20;
|
|
||||||
"30" = 30;
|
|
||||||
"40" = 40;
|
|
||||||
"50" = 50;
|
|
||||||
"60" = 60;
|
|
||||||
"70" = 70;
|
|
||||||
"80" = 80;
|
|
||||||
"90" = 90;
|
|
||||||
"100" = 100;
|
|
||||||
};
|
|
||||||
|
|
||||||
format-full = " ${fmt}";
|
|
||||||
format-time = "{H}:{M}";
|
|
||||||
weighted-average = true;
|
|
||||||
}
|
|
||||||
// lib.mapAttrs' (state: icon: {
|
|
||||||
name = "format-discharging-${state}";
|
|
||||||
value = "${icon} ${fmt}";
|
|
||||||
}) dis
|
|
||||||
// lib.mapAttrs' (state: icon: {
|
|
||||||
name = "format-charging-${state}";
|
|
||||||
value = "${icon} ${fmt}";
|
|
||||||
}) chr;
|
|
||||||
|
|
||||||
backlight = {
|
|
||||||
format = " {percent} %";
|
|
||||||
|
|
||||||
on-scroll-up = with cmd; "${brightnessctl} s +1%";
|
|
||||||
on-scroll-down = with cmd; "${brightnessctl} s 1%-";
|
|
||||||
};
|
|
||||||
|
|
||||||
mpris = {
|
|
||||||
format = "{status}";
|
|
||||||
status-icons = {
|
|
||||||
playing = "";
|
|
||||||
paused = "";
|
|
||||||
stopped = "";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
"pulseaudio#sink" = let
|
|
||||||
fmt = "{volume} %";
|
|
||||||
in {
|
|
||||||
format = "{icon} ${fmt}";
|
|
||||||
format-bluetooth = " ${fmt}";
|
|
||||||
format-muted = " ${fmt}";
|
|
||||||
|
|
||||||
format-icons = {
|
|
||||||
headphone = "";
|
|
||||||
default = [ "" "" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
format-source = " ${fmt}";
|
|
||||||
format-source-muted = " ${fmt}";
|
|
||||||
|
|
||||||
on-click = cmd.pwvucontrol;
|
|
||||||
on-click-right = with cmd; "${wpctl} set-mute @DEFAULT_AUDIO_SINK@ toggle";
|
|
||||||
on-scroll-up = with cmd; "${wpctl} set-volume @DEFAULT_AUDIO_SINK@ 1%+";
|
|
||||||
on-scroll-down = with cmd; "${wpctl} set-volume @DEFAULT_AUDIO_SINK@ 1%-";
|
|
||||||
};
|
|
||||||
|
|
||||||
"pulseaudio#source" = let
|
|
||||||
fmt = "{volume} %";
|
|
||||||
in {
|
|
||||||
format = "{format_source}";
|
|
||||||
format-source = " ${fmt}";
|
|
||||||
format-source-muted = " ${fmt}";
|
|
||||||
|
|
||||||
on-click = cmd.pwvucontrol;
|
|
||||||
on-click-right = with cmd; "${wpctl} set-mute @DEFAULT_AUDIO_SOURCE@ toggle";
|
|
||||||
on-scroll-up = with cmd; "${wpctl} set-volume @DEFAULT_AUDIO_SOURCE@ 1%+";
|
|
||||||
on-scroll-down = with cmd; "${wpctl} set-volume @DEFAULT_AUDIO_SOURCE@ 1%-";
|
|
||||||
};
|
|
||||||
|
|
||||||
clock = {
|
|
||||||
format = " {:%H:%M %Z}";
|
|
||||||
format-alt = " {:%Y-%m-%d}";
|
|
||||||
tooltip-format = "<tt><small>{calendar}</small></tt>";
|
|
||||||
calendar = {
|
|
||||||
mode = "month";
|
|
||||||
weeks-pos = "left";
|
|
||||||
on-scroll = 1;
|
|
||||||
format = {
|
|
||||||
weeks = "{:%W}";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.yt-dlp.enable = true;
|
|
||||||
|
|
||||||
services.gammastep = lib.optionalAttrs (osConfig ? location) (
|
|
||||||
let inherit (osConfig) location; in {
|
|
||||||
inherit (location) provider;
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
general.adjustment-method = "wayland";
|
|
||||||
};
|
|
||||||
} // lib.optionalAttrs (location.provider == "manual") {
|
|
||||||
#inherit (location) latitude longitude;
|
|
||||||
});
|
|
||||||
|
|
||||||
services.mako = {
|
|
||||||
enable = true;
|
|
||||||
defaultTimeout = 5000;
|
|
||||||
};
|
|
||||||
|
|
||||||
services.mopidy = {
|
|
||||||
enable = true;
|
|
||||||
extensionPackages = with pkgs; [
|
|
||||||
mopidy-iris
|
|
||||||
mopidy-local
|
|
||||||
mopidy-mpd
|
|
||||||
mopidy-mpris
|
|
||||||
];
|
|
||||||
settings = {
|
|
||||||
core = {
|
|
||||||
cache_dir = "$XDG_CACHE_DIR/mopidy";
|
|
||||||
config_dir = "$XDG_CONFIG_DIR/mopidy";
|
|
||||||
data_dir = "$XDG_DATA_DIR/mopidy";
|
|
||||||
};
|
|
||||||
|
|
||||||
audio.mixer = "none";
|
|
||||||
file.media_dirs = [ "$XDG_MUSIC_DIR" ];
|
|
||||||
local.media_dir = "$XDG_MUSIC_DIR";
|
|
||||||
|
|
||||||
mpd.hostname = "localhost";
|
|
||||||
|
|
||||||
http = {
|
|
||||||
hostname = "localhost";
|
|
||||||
port = 6680;
|
|
||||||
default_app = "iris";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
services.swayidle = {
|
|
||||||
enable = true;
|
|
||||||
events = with cmd; [
|
|
||||||
{ event = "lock"; command = "${swaylock} -f"; }
|
|
||||||
{ event = "before-sleep"; command = "${loginctl} lock-session"; }
|
|
||||||
];
|
|
||||||
|
|
||||||
timeouts = with cmd; [
|
|
||||||
{
|
|
||||||
timeout = 210;
|
|
||||||
command = "${brightnessctl} --save -e set 20%-";
|
|
||||||
resumeCommand = "${brightnessctl} --restore";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
timeout = 240;
|
|
||||||
command = "${loginctl} lock-session";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
services.syncthing = {
|
|
||||||
enable = true;
|
|
||||||
tray.enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
services.udiskie = {
|
|
||||||
enable = true;
|
|
||||||
automount = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
stylix = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
image = ./wallpaper.png;
|
|
||||||
base16Scheme = "${pkgs.base16-schemes}/share/themes/catppuccin-macchiato.yaml";
|
|
||||||
polarity = "dark";
|
|
||||||
|
|
||||||
opacity = {
|
|
||||||
applications = 0.98;
|
|
||||||
desktop = 0.98;
|
|
||||||
popups = 0.99;
|
|
||||||
terminal = 0.98;
|
|
||||||
};
|
|
||||||
|
|
||||||
fonts = {
|
|
||||||
sansSerif = {
|
|
||||||
package = pkgs.lato;
|
|
||||||
name = "sans-serif";
|
|
||||||
};
|
|
||||||
|
|
||||||
serif = {
|
|
||||||
package = pkgs.noto-fonts;
|
|
||||||
name = "serif";
|
|
||||||
};
|
|
||||||
|
|
||||||
monospace = {
|
|
||||||
package = pkgs.fira-code;
|
|
||||||
name = "monospace";
|
|
||||||
};
|
|
||||||
|
|
||||||
emoji = {
|
|
||||||
package = pkgs.noto-fonts-color-emoji;
|
|
||||||
name = "emoji";
|
|
||||||
};
|
|
||||||
|
|
||||||
sizes = {
|
|
||||||
terminal = 11;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
systemd.user.services = lib.genAttrs [ "syncthing" ] (service: {
|
|
||||||
Unit = {
|
|
||||||
ConditionACPower = true;
|
|
||||||
StopPropagatedFrom = [ "power-external.target" ];
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
xdg.configFile."fontconfig/conf.d/80-fira-code.conf".text = ''
|
|
||||||
<?xml version='1.0'?>
|
|
||||||
<!DOCTYPE fontconfig SYSTEM 'urn:fontconfig:fonts.dtd'>
|
|
||||||
<fontconfig>
|
|
||||||
<match target="font">
|
|
||||||
<test name="family" compare="eq" ignore-blanks="true">
|
|
||||||
<string>Fira Code</string>
|
|
||||||
</test>
|
|
||||||
<edit name="fontfeatures" mode="append">
|
|
||||||
${fira-code-features
|
|
||||||
|> map (tag: "<string>${lib.escapeXML tag}</string>")
|
|
||||||
|> lib.concatStrings}
|
|
||||||
</edit>
|
|
||||||
</match>
|
|
||||||
</fontconfig>
|
|
||||||
'';
|
|
||||||
|
|
||||||
xdg.configFile."kitty/open-actions.conf".text = with cmd; ''
|
|
||||||
protocol file
|
|
||||||
mime image/*
|
|
||||||
action launch --type overlay kitten icat --hold -- "$FILE_PATH"
|
|
||||||
|
|
||||||
protocol file
|
|
||||||
mime text/markdown
|
|
||||||
action launch --type overlay ${mdless} -- "$FILE_PATH"
|
|
||||||
|
|
||||||
protocol file
|
|
||||||
mime text/*
|
|
||||||
action launch --type overlay $EDITOR -- "$FILE_PATH"
|
|
||||||
|
|
||||||
protocol file
|
|
||||||
mime video/*
|
|
||||||
action launch --type background ${mpv} -- "$FILE_PATH"
|
|
||||||
|
|
||||||
protocol file
|
|
||||||
mime audio/*
|
|
||||||
action launch --type overlay ${mpv} -- "$FILE_PATH"
|
|
||||||
|
|
||||||
protocol
|
|
||||||
action launch --type background ${xdg-open} "$FILE_PATH"
|
|
||||||
'';
|
|
||||||
|
|
||||||
xdg.desktopEntries = {
|
|
||||||
kitty = {
|
|
||||||
name = "kitty";
|
|
||||||
exec = builtins.replaceStrings [ "$" ] [ ''\\$'' ] cmd.kitty;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
xdg.mimeApps = {
|
|
||||||
enable = true;
|
|
||||||
defaultApplications = {
|
|
||||||
"default-web-browser" = [ "firefox.desktop" ];
|
|
||||||
"application/pdf" = [ "sioyek.desktop" ];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
xdg.portal = {
|
|
||||||
enable = true;
|
|
||||||
config.common.default = [ "wlr" "gtk" ];
|
|
||||||
extraPortals = with pkgs; [
|
|
||||||
xdg-desktop-portal-wlr
|
|
||||||
(xdg-desktop-portal-gtk.override { buildPortalsInGnome = false; })
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
Loading…
Reference in a new issue