Compare commits

..

No commits in common. "5d1408254a4189ff369a290973728b0e15ea4a33" and "d2eb1518c70e5a67736ffff2a5cca1d54947791f" have entirely different histories.

25 changed files with 1654 additions and 666 deletions

1016
flake.lock generated

File diff suppressed because it is too large Load diff

View file

@ -1,10 +1,10 @@
{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05";
nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11";
unstable.url = "github:nixos/nixpkgs/nixos-unstable";
home-manager = {
url = "github:nix-community/home-manager/release-25.05";
url = "github:nix-community/home-manager/release-24.11";
inputs.nixpkgs.follows = "nixpkgs";
};
@ -17,11 +17,6 @@
homepage.url = "git+https://git.posixlycorrect.com/fabian/homepage.git?ref=master";
trivionomicon = {
url = "git+https://git.posixlycorrect.com/deepState/trivionomicon?ref=master";
inputs.nixpkgs.follows = "nixpkgs";
};
authentik-nix = {
url = "github:nix-community/authentik-nix";
inputs.nixpkgs.follows = "nixpkgs";
@ -45,9 +40,9 @@
flake-utils,
vpsadminos,
homepage,
conduwuit,
mediawikiSkinCitizen,
authentik-nix,
trivionomicon,
}: let
system = "x86_64-linux";
@ -60,7 +55,6 @@
self.overlays.default
nur.overlays.default
nixGL.overlay
trivionomicon.overlays.default
];
};
@ -90,10 +84,6 @@
specialArgs = {
inherit flakes;
doctrine = import "${trivionomicon}/doctrine" {
inherit pkgs;
namespace = "sys";
};
};
};
@ -129,10 +119,6 @@
extraSpecialArgs = {
inherit flakes;
doctrine = import "${trivionomicon}/doctrine" {
inherit pkgs;
namespace = "hm";
};
};
};

View file

@ -8,6 +8,5 @@
with lib; {
imports = [
./modules
flakes.trivionomicon.homeManagerModules.default
];
}

View file

@ -8,10 +8,11 @@ with lib; let
cfg = config.local.services.deepState;
in {
options.local.services.deepState.enable = mkEnableOption "trivionomicon settings";
config = mkIf cfg.enable {
home.sessionVariables = {
FSOCIETY_TELEGRAM_BACKUP_N = "0";
FSOCIETY_TELEGRAM_BACKUP_LOCATION = "/extern/var/fsociety_backup";
config =
mkIf cfg.enable {
home.sessionVariables = {
FSOCIETY_TELEGRAM_BACKUP_N = "0";
FSOCIETY_TELEGRAM_BACKUP_LOCATION = "/extern/var/fsociety_backup";
};
};
};
}

View file

@ -18,6 +18,5 @@
./accounts.nix
./syncthing.nix
./deepState.nix
./mapping.nix
];
}

View file

@ -15,7 +15,7 @@ in {
calibre
chromium
discord
kdePackages.gwenview
gwenview
libreoffice-fresh
mpv
obs-studio

View file

@ -10,6 +10,14 @@ in {
options.local.apps.firefox = {
enable = mkEnableOption "firefox settings";
workspace = mkOption {
type = types.nullOr types.str;
default = null;
description = ''
i3 Workspace in which Firefox should open. If not set, Firefox will not open at startup
'';
};
makeDefaultBrowser = mkOption {
type = types.bool;
default = true;
@ -22,6 +30,10 @@ in {
config = mkIf cfg.enable (mkMerge [
{
programs.firefox.enable = true;
xsession.windowManager.i3.config.startup = optional (cfg.workspace != null) {
command = "${lib.getExe pkgs.i3-gaps} 'workspace ${cfg.workspace}; exec ${lib.getExe pkgs.firefox}'";
};
}
(mkIf cfg.makeDefaultBrowser {

View file

@ -38,7 +38,7 @@ in {
maxCacheTtl = 3600 * 6;
maxCacheTtlSsh = 3600 * 6;
pinentry.package = pkgs.pinentry-emacs;
pinentryPackage = pkgs.pinentry-emacs;
};
accounts.email.accounts = {

View file

@ -0,0 +1,32 @@
{
config,
lib,
pkgs,
...
}:
with lib; let
cfg = config.local.gui;
in {
programs.autorandr = {
profiles."default" = {
fingerprint =
mapAttrs
(monitorId: monitor: monitor.fingerprint)
cfg.monitors;
config =
mapAttrs (
monitorId:
filterAttrs
(k: v:
!elem k [
#list of options to exclude from this list
"fingerprint"
"initialI3Workspace"
"monitorId"
])
)
cfg.monitors;
};
};
}

View file

@ -9,66 +9,120 @@ with lib; let
monitorType = {setName}: (
types.submodule ({name ? null, ...}: {
options = {
width = mkOption {
monitorId = mkOption {
type = types.str;
default = "1920";
example = "1920";
example = "DP-1";
readOnly = true;
internal = true;
};
height = mkOption {
primary = mkOption {
type = types.bool;
default = false;
description = "is primary monitor";
example = "true";
};
position = mkOption {
type = types.str;
default = "1080";
example = "1080";
example = "0x0";
};
mode = mkOption {
type = types.str;
description = "resolution";
default = "1920x1080";
example = "1920x1080";
};
rate = mkOption {
type = types.str;
description = "refresh rate";
example = "143.85";
};
posX = mkOption {
rotate = mkOption {
type = types.str;
description = "x axis position";
default = "0";
example = "0";
default = "normal";
example = "left";
};
posY = mkOption {
fingerprint = mkOption {
type = types.str;
description = "y axis position";
default = "0";
example = "0";
example = "00ffffffffffff003669a03bd4040000231e0104a5341d783bd005ac5048a627125054bfcf00814081809500714f81c0b30001010101023a801871382d40582c450009252100001e0882805070384d400820f80c09252100001a000000fd003090b4b422010a202020202020000000fc004d53492047323443340a20202001a2020320f14d010304131f120211900e0f1d1e230907078301000065030c001000866f80a0703840403020350009252100001a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e9";
};
initialI3Workspace = mkOption {
type = types.nullOr types.int;
default = null;
example = 1;
};
};
config = optionalAttrs setName {
# make this better later
monitorId = name;
};
})
);
in {
options.local.gui = {
enable = mkEnableOption "GUI settings";
primaryMonitor = mkOption {
type = monitorType {setName = false;};
readOnly = true;
internal = true;
};
monitors = mkOption {
type = types.attrsOf (monitorType {setName = true;});
};
displayBatteryLevel = mkOption {
type = types.bool;
default = false;
description = "show battery level on polybar";
example = "true";
};
};
imports = [
./autorandr.nix
./fonts.nix
./i3.nix
./polybar.nix
./startx.nix
./picom.nix
./theme.nix
./sway.nix
./waybar.nix
./wofi.nix
];
config = mkIf cfg.enable {
services = {
mako.enable = true;
};
config = let
primaryMonitors =
filter (monitor: monitor.primary)
(attrValues cfg.monitors);
in
mkIf cfg.enable {
assertions = [
{
assertion = length primaryMonitors == 1;
message = "Exactly one (1) primary monitor is requiered.";
}
];
xdg = {
enable = true;
mimeApps = {
local.gui.primaryMonitor = head primaryMonitors;
xsession = {
enable = true;
defaultApplications = {
"application/pdf" = with pkgs; ["qpdfview"];
"x-scheme-handler/file" = with pkgs; ["kitty"];
windowManager.i3.enable = true;
};
programs.autorandr.enable = true;
services = {
dunst.enable = true;
betterlockscreen.enable = true;
polybar.enable = true;
picom.enable = true;
};
xdg = {
enable = true;
mimeApps = {
enable = true;
defaultApplications = {
"application/pdf" = with pkgs; ["qpdfview"];
"x-scheme-handler/file" = with pkgs; ["kitty"];
};
};
};
};
};
}

View file

@ -4,38 +4,9 @@
pkgs,
...
}: {
fonts.fontconfig = {
enable = true;
defaultFonts = {
monospace = [
"JetBrains Mono"
"Noto Sans Mono CJK SC"
"Noto Sans Mono"
"Noto Color Emoji"
];
sansSerif = [
"Noto Sans"
"Noto Sans CJK SC"
"Noto Color Emoji"
];
serif = [
"Noto Serif"
"Noto Serif CJK SC"
"Noto Color Emoji"
];
emoji = ["Noto Color Emoji"];
};
};
fonts.fontconfig.enable = true;
# this is probably not necessary since they are already installed in sys
# with fonts.packages buy im too lazy to check
home.packages = with pkgs; [
jetbrains-mono
noto-fonts
noto-fonts-cjk-sans
noto-fonts-emoji
noto-fonts-extra
nerd-fonts.fira-code
nerd-fonts.droid-sans-mono
];
}

104
home/modules/gui/i3.nix Normal file
View file

@ -0,0 +1,104 @@
{
config,
lib,
pkgs,
...
}:
with lib; {
xsession.windowManager.i3 = {
package = pkgs.i3-gaps;
config = let
mod = "Mod4";
in {
modifier = mod;
fonts = {
names = ["JetBrains Mono"];
style = "Regular";
size = 8.0;
};
gaps = {
inner = 10;
outer = -10;
};
window = {
hideEdgeBorders = "both";
titlebar = false;
};
workspaceLayout = "tabbed";
colors = {
focused = {
background = "#222222";
border = "#4c7899";
childBorder = "#222222";
indicator = "#292d2e";
text = "#888888";
};
};
# mkOptionDefault hace que se ponga la config por default
# y se sobreescriba las cosas que pongo acá
# NO QUITARLO. ver man home-configuration.nix
keybindings = mkOptionDefault {
"${mod}+Return" = "exec ${lib.getExe pkgs.kitty} ${lib.getExe pkgs.tmux}";
"${mod}+Tab" = "focus right";
"${mod}+Shift+Tab" = "focus left";
"${mod}+Shift+s" = "exec ${lib.getExe pkgs.maim} -s -u | ${lib.getExe pkgs.xclip} -selection clipboard -t image/png -i";
"${mod}+Shift+w" = "move workspace to output right";
"${mod}+l" = "exec ${lib.getExe pkgs.betterlockscreen} -l";
};
startup = [
{
command = "${lib.getExe pkgs.xss-lock} --transfer-sleep-lock -- ${lib.getExe pkgs.i3lock} --nofork";
notification = false;
}
{
command = "${lib.getExe pkgs.networkmanagerapplet}";
notification = false;
}
#todo: sería nice hostear esta imagen en el server y fetchearla si no existe
{
command = "${lib.getExe pkgs.feh} --bg-fill ${config.home.homeDirectory}/Pictures/wallpapers/jupiter.png";
notification = false;
always = true;
}
{
#todo: move this to telegram module
command = "${lib.getExe pkgs.i3-gaps} 'workspace 2; exec ${lib.getExe pkgs.tdesktop}'";
}
{
command = "${lib.getExe pkgs.i3-gaps} 'workspace 2; exec ${lib.getExe pkgs.gajim}'";
}
{
command = "${pkgs.systemd}/bin/systemctl --user restart polybar.service";
notification = false;
always = true;
}
{
command = "${lib.getExe pkgs.autorandr} -c";
notification = false;
always = true;
}
];
workspaceOutputAssign =
mapAttrsToList (
monitorId: v:
{
output = monitorId;
}
// optionalAttrs (v.initialI3Workspace != null) {
workspace = toString v.initialI3Workspace;
}
)
config.local.gui.monitors;
bars = [];
};
};
}

View file

@ -0,0 +1,41 @@
{
config,
pkgs,
lib,
...
}: {
services.picom = {
fade = true;
fadeSteps = [0.1 0.1];
fadeDelta = 10;
settings = {
animations = [
{
triggers = [
"open"
"show"
];
preset = "appear";
duration = "1";
}
{
triggers = [
"close"
"hide"
];
preset = "disappear";
duration = "1";
}
{
triggers = [
"geometry"
];
preset = "geometry-change";
duration = "1";
}
];
};
};
}

View file

@ -0,0 +1,460 @@
{
config,
lib,
pkgs,
...
}:
with lib; {
services.polybar = {
package = pkgs.polybarFull;
script = ''
# Terminate already running bar instances
killall -q polybar
# Wait until the processes have been shut down
while pgrep -u $UID -x polybar >/dev/null; do sleep 1; done
# Launch Polybar, using default config location ~/.config/polybar/config
polybar -r main & polybar -r secondary &
'';
settings = {
"colors" = {
# background = "\${xrdb:color0:#222}";
background = "#AA000000";
background-alt = "#00000000";
# foreground = "\${xrdb:color7:#222}";
foreground = "#ffffff";
foreground-alt = "#ffffff";
primary = "#ffffff";
secondary = "#e60053";
alert = "#bd2c40";
};
"bar/main" = {
monitor = config.local.gui.primaryMonitor.monitorId;
width = "100%";
height = 30;
offset-x = "0%";
offset-y = "0%";
radius = 0.0;
fixed-center = false;
background = "\${colors.background}";
foreground = "\${colors.foreground}";
line-size = 1;
line-color = "#f0000000";
border-size = 0;
border-color = "#00000000";
padding-left = 0;
padding-right = 0;
module-margin-left = 1;
module-margin-right = 1;
# font-0 = "fixed:pixelsize=10;1";
font-0 = "JetBrains Mono Light:size=10;0";
font-1 = "unifont:fontformat=truetype:size=8:antialias=false;0";
font-2 = "siji:pixelsize=10;1";
# font-2 = "FontAwesome5Free:style=Regular:size=10;4";
modules-left = "i3";
modules-center = "xwindow";
modules-right = "xkeyboard pulseaudio filesystem memory cpu temperature gputemperature nvmetemperature wlan eth date semanatec";
separator = "|";
tray-position = "right";
tray-padding = 2;
# To allow other windows to be placed above the bar, or to avoid having the bar visible when in fullscreen mode,
# you need to use the following two parameters. Note that it will tell the window manager to back off so no
# area will be reserved, etc.
#
# wm-restack = "i3";
# override-redirect = true;
cursor-click = "pointer";
cursor-scroll = "ns-resize";
};
"bar/secondary" = {
monitor = head (attrNames (filterAttrs (monitorId: v:
!v.primary)
config.local.gui.monitors)); # this is bad. will fail if more than 2 monitors. this sets all monitors other than the primary one for this bar.
"inherit" = "bar/main";
modules-left = "i3";
modules-center = "xwindow";
modules-right = "xkeyboard pulseaudio date";
tray-position = "none";
};
"module/xwindow" = {
type = "internal/xwindow";
label = "%title:0:30:...%";
};
"module/xkeyboard" = {
type = "internal/xkeyboard";
blacklist-0 = "num lock";
format-prefix = "";
format-prefix-foreground = "\${colors.foreground-alt}";
label-layout = "%layout%";
label-indicator-padding = 2;
label-indicator-margin = 1;
label-indicator-background = "\${colors.secondary}";
};
"module/filesystem" = {
type = "internal/fs";
interval = 10;
mount-0 = "/";
label-mounted = "%{F#0a81f5}%mountpoint%%{F-}: %used%/%total%";
label-unmounted = "";
};
"module/i3" = {
type = "internal/i3";
format = "<label-state> <label-mode>";
index-sort = true;
wrapping-scroll = false;
# Only show workspaces on the same output as the bar
# pin-workspaces = true
label-mode-padding = 1;
label-mode-foreground = "#000";
label-mode-background = "\${colors.primary}";
# focused = Active workspace on focused monitor
label-focused = "%index%";
label-focused-background = "\${colors.background}";
label-focused-underline = "\${colors.primary}";
label-focused-padding = 1;
# unfocused = Inactive workspace on any monitor
label-unfocused = "%index%";
label-unfocused-padding = 1;
# visible = Active workspace on unfocused monitor
label-visible = "%index%";
label-visible-background = "\${self.label-focused-background}";
label-visible-underline = "\${self.label-focused-underline}";
label-visible-padding = "\${self.label-focused-padding}";
# urgent = Workspace with urgency hint set
label-urgent = "%index%";
label-urgent-background = "\${colors.alert}";
label-urgent-padding = 1;
};
"module/xbacklight" = {
type = "internal/xbacklight";
format = "<label> <bar>";
label = "BL";
bar-width = 10;
bar-indicator = "|";
bar-indicator-foreground = "#fff";
bar-indicator-font = 2;
bar-fill = "";
bar-fill-font = 2;
bar-fill-foreground = "#9f78e1";
bar-empty = "";
bar-empty-font = 2;
bar-empty-foreground = "\${colors.foreground-alt}";
};
"module/backlight-acpi" = {
"inherit" = "module/xbacklight";
type = "internal/backlight";
card = "intel_backlight";
};
"module/cpu" = {
type = "internal/cpu";
interval = 2;
format-prefix = "cpu ";
format-prefix-foreground = "\${colors.foreground-alt}";
label = "%percentage:2%%";
};
"module/memory" = {
type = "internal/memory";
interval = 2;
format-prefix = "mem ";
format-prefix-foreground = "\${colors.foreground-alt}";
label = "%percentage_used%%";
};
"module/wlan" = {
type = "internal/network";
interface = "wlp7s0";
interval = 3.0;
format-connected = "<ramp-signal> <label-connected>";
label-connected = "%essid%";
format-disconnected = "";
# format-disconnected = "<label-disconnected>";
# format-disconnected-underline = "\${self.format-connected-underline}";
# label-disconnected = "%ifname% disconnected";
# label-disconnected-foreground = "\${colors.foreground-alt}";
ramp-signal-0 = "";
ramp-signal-1 = "";
ramp-signal-2 = "";
ramp-signal-3 = "";
ramp-signal-4 = "";
ramp-signal-foreground = "\${colors.foreground-alt}";
};
"module/eth" = {
type = "internal/network";
interface = "enp8s0";
interval = 3.0;
format-connected-prefix = "";
format-connected-prefix-foreground = "\${colors.foreground-alt}";
label-connected = "%local_ip%";
format-disconnected = "";
# format-disconnected = "<label-disconnected>";
# format-disconnected-underline = "\${self.format-connected-underline}";
# label-disconnected = "%ifname% disconnected";
# label-disconnected-foreground = "\${colors.foreground-alt}";
};
"module/date" = {
type = "internal/date";
interval = 1;
date = " %d/%m/%Y";
date-alt = " %c";
time = "%H:%M";
time-alt = " [%s]";
format-prefix = "";
format-prefix-foreground = "\${colors.foreground-alt}";
label = "%date% %time%";
};
# "module/semanatec" = {
# type = "custom/script"
# exec = "/home/fabian/bin/semanatec/target/release/semanatec"
# interval = 3600
# format-prefix = ""
# };
"module/pulseaudio" = {
type = "internal/pulseaudio";
format-volume = "<label-volume>";
label-volume = "vol %percentage%%";
label-volume-foreground = "\${root.foreground}";
label-muted = "vol 0%";
label-muted-foreground = "\${root.foreground}";
bar-volume-width = 10;
bar-volume-foreground-0 = "#55aa55";
bar-volume-foreground-1 = "#55aa55";
bar-volume-foreground-2 = "#55aa55";
bar-volume-foreground-3 = "#55aa55";
bar-volume-foreground-4 = "#55aa55";
bar-volume-foreground-5 = "#f5a70a";
bar-volume-foreground-6 = "#ff5555";
bar-volume-gradient = false;
bar-volume-indicator = "|";
bar-volume-indicator-font = 2;
bar-volume-fill = "";
bar-volume-fill-font = 2;
bar-volume-empty = "";
bar-volume-empty-font = 2;
bar-volume-empty-foreground = "\${colors.foreground-alt}";
};
"module/alsa" = {
type = "internal/alsa";
format-volume = "<label-volume> <bar-volume>";
label-volume = "VOL";
label-volume-foreground = "\${root.foreground}";
format-muted-prefix = "vol ";
format-muted-foreground = "\${colors.foreground-alt}";
label-muted = "sound muted";
bar-volume-width = 10;
bar-volume-foreground-0 = "#55aa55";
bar-volume-foreground-1 = "#55aa55";
bar-volume-foreground-2 = "#55aa55";
bar-volume-foreground-3 = "#55aa55";
bar-volume-foreground-4 = "#55aa55";
bar-volume-foreground-5 = "#f5a70a";
bar-volume-foreground-6 = "#ff5555";
bar-volume-gradient = false;
bar-volume-indicator = "|";
bar-volume-indicator-font = 2;
bar-volume-fill = "";
bar-volume-fill-font = 2;
bar-volume-empty = "";
bar-volume-empty-font = 2;
bar-volume-empty-foreground = "\${colors.foreground-alt}";
};
"module/battery" = {
type = "internal/battery";
battery = "BAT0";
adapter = "ADP1";
full-at = 98;
format-charging = "<animation-charging> <label-charging>";
format-charging-underline = "#ffb52a";
format-discharging = "<animation-discharging> <label-discharging>";
format-discharging-underline = "\${self.format-charging-underline}";
format-full-prefix = " ";
format-full-prefix-foreground = "\${colors.foreground-alt}";
format-full-underline = "\${self.format-charging-underline}";
ramp-capacity-0 = "";
ramp-capacity-1 = "";
ramp-capacity-2 = "";
ramp-capacity-foreground = "\${colors.foreground-alt}";
animation-charging-0 = "";
animation-charging-1 = "";
animation-charging-2 = "";
animation-charging-foreground = "\${colors.foreground-alt}";
animation-charging-framerate = 750;
animation-discharging-0 = "";
animation-discharging-1 = "";
animation-discharging-2 = "";
animation-discharging-foreground = "\${colors.foreground-alt}";
animation-discharging-framerate = 750;
};
"module/temperature" = {
type = "internal/temperature";
warn-temperature = 60;
hwmon-path = "/sys/devices/pci0000:00/0000:00:18.3/hwmon/hwmon1/temp2_input";
format = "<ramp> <label>";
format-warn = "<ramp> <label-warn>";
label = "cpu %temperature-c%";
label-warn = "cpu %temperature-c%";
label-warn-foreground = "\${colors.secondary}";
ramp-0 = "";
ramp-1 = "";
ramp-2 = "";
ramp-foreground = "\${colors.foreground-alt}";
};
"module/gputemperature" = {
type = "internal/temperature";
warn-temperature = 60;
hwmon-path = "/sys/devices/pci0000:00/0000:00:03.1/0000:09:00.0/hwmon/hwmon3/temp1_input";
format = "<ramp> <label>";
format-warn = "<ramp> <label-warn>";
label = "gpu %temperature-c%";
label-warn = "gpu %temperature-c%";
label-warn-foreground = "\${colors.secondary}";
ramp-0 = "";
ramp-1 = "";
ramp-2 = "";
ramp-foreground = "\${colors.foreground-alt}";
};
"module/nvmetemperature" = {
type = "internal/temperature";
warn-temperature = 60;
hwmon-path = "/sys/devices/pci0000:00/0000:00:01.1/0000:01:00.0/hwmon/hwmon0/temp1_input";
format = "<ramp> <label>";
format-warn = "<ramp> <label-warn>";
label = "M.2 %temperature-c%";
label-warn = "M.2 %temperature-c%";
label-warn-foreground = "\${colors.secondary}";
ramp-0 = "";
ramp-1 = "";
ramp-2 = "";
ramp-foreground = "\${colors.foreground-alt}";
};
"module/powermenu" = {
type = "custom/menu";
expand-right = true;
format-spacing = 1;
label-open = "";
label-open-foreground = "\${colors.secondary}";
label-close = " cancel";
label-close-foreground = "\${colors.secondary}";
label-separator = "|";
label-separator-foreground = "\${colors.foreground-alt}";
menu-0-0 = "reboot";
menu-0-0-exec = "menu-open-1";
menu-0-1 = "power off";
menu-0-1-exec = "menu-open-2";
menu-1-0 = "cancel";
menu-1-0-exec = "menu-open-0";
menu-1-1 = "reboot";
menu-1-1-exec = "sudo reboot";
menu-2-0 = "power off";
menu-2-0-exec = "sudo poweroff";
menu-2-1 = "cancel";
menu-2-1-exec = "menu-open-0";
};
"module/sink_changer" = {
type = "custom/script";
exec = "/home/fabian/bin/polybar_scripts/info.sh";
label = "%output%";
click-left = "/home/fabian/bin/polybar_scripts/sink_changer.sh";
# format-prefix = " ";
interval = "0";
# format-prefix-foreground = "${colors.foreground-alt}";
};
"settings" = {
screenchange-reload = true;
# compositing-background = "xor";
# compositing-background = "screen";
# compositing-foreground = "source";
# compositing-border = "over";
# pseudo-transparency = false;
};
"global/wm" = {
margin-top = 5;
margin-bottom = 5;
};
};
};
}

View file

@ -0,0 +1,16 @@
{
config,
lib,
pkgs,
...
}:
with lib; {
config = mkIf config.local.gui.enable {
home.file.".xinitrc".source = let
content = ''
exec ~/.xsession
'';
in
pkgs.writeShellScript "xinitrc" content;
};
}

View file

@ -1,142 +0,0 @@
{
config,
lib,
pkgs,
...
}:
with lib; let
cfg = config.local.gui;
in {
config = mkIf cfg.enable {
home.packages = [
pkgs.wlr-randr
];
services = {
swayidle = {
enable = true;
timeouts = [
{
timeout = 600;
command = "${getExe pkgs.gtklock} -d";
}
];
};
};
systemd.user.services.wl-gammarelay-rs = {
Unit.After = ["sway-session.target"];
Install.WantedBy = ["sway-session.target"];
Service.ExecStart = getExe pkgs.wl-gammarelay-rs;
};
wayland.windowManager.sway = {
enable = true;
config = {
output =
lib.mapAttrs (k: v: {
mode = "${toString v.width}x${toString v.height}@${v.rate}Hz";
pos = "${toString v.posX} ${toString v.posY}";
})
cfg.monitors;
modifier = "Mod4";
focus.followMouse = true;
input = {
"*" = {
xkb_layout = "us";
xkb_variant = "altgr-intl";
};
};
fonts = {
names = ["JetBrains Mono"];
style = "Regular";
size = 8.0;
};
gaps = {
inner = 10;
outer = -10;
};
bars = singleton {
command = "waybar";
position = "top";
};
window = {
hideEdgeBorders = "both";
titlebar = false;
};
workspaceLayout = "tabbed";
colors = {
focused = {
background = "#222222";
border = "#4c7899";
childBorder = "#222222";
indicator = "#292d2e";
text = "#888888";
};
};
keybindings = let
mod = config.wayland.windowManager.sway.config.modifier;
wofi = config.programs.wofi.package;
grimshot = getExe pkgs.sway-contrib.grimshot;
in
mkOptionDefault {
"${mod}+a" = "focus parent";
"${mod}+c" = "focus child";
"${mod}+d" = "exec --no-startup-id ${getExe wofi} -S run";
"${mod}+l" = "exec ${getExe pkgs.gtklock} -d";
"${mod}+Return" = "exec ${lib.getExe pkgs.kitty} ${lib.getExe pkgs.tmux}";
"${mod}+Shift+s" = "exec ${grimshot} copy area";
"${mod}+Tab" = "focus right";
"${mod}+Shift+Tab" = "focus left";
"${mod}+Shift+w" = "move workspace to output right";
};
startup = [
{
command = "${lib.getExe pkgs.sway} 'workspace 1; exec ${lib.getExe pkgs.firefox}'";
}
{
command = "${lib.getExe pkgs.sway} 'workspace 2; exec ${lib.getExe pkgs.tdesktop}'";
}
{
command = "${lib.getExe pkgs.sway} 'workspace 2; exec ${lib.getExe pkgs.gajim}'";
}
{
command = "${lib.getExe pkgs.swaybg} -m fill -i ${config.home.homeDirectory}/Pictures/wallpapers/jupiter.png";
always = true;
}
{
command = "${lib.getExe pkgs.networkmanagerapplet}";
}
];
};
extraSessionCommands = ''
export SDL_VIDEODRIVER=wayland
# needs qt5.qtwayland in systemPackages
export QT_QPA_PLATFORM=wayland
export QT_WAYLAND_DISABLE_WINDOWDECORATION="1"
# Fix for some Java AWT applications (e.g. Android Studio),
# use this if they aren't displayed properly:
export _JAVA_AWT_WM_NONREPARENTING=1
'';
swaynag.enable = true;
systemd.enable = true;
xwayland = true;
};
};
}

View file

@ -1,172 +0,0 @@
{
config,
lib,
pkgs,
...
}:
with lib; let
cfg = config.local.gui;
in {
config = mkIf cfg.enable {
programs.waybar = {
enable = true;
settings = {
mainBar = {
layer = "top";
position = "top";
height = 20;
spacing = 0;
modules-left = [
"sway/workspaces"
"sway/mode"
];
modules-center = [
"clock"
];
modules-right = [
"cpu"
"memory"
"keyboard-state"
"tray"
];
"keyboard-state" = {
numlock = true;
capslock = true;
};
"tray" = {
icon-size = 13;
spacing = 8;
};
"clock" = {
interval = 60;
format = "{:%A %B %d %Y %H:%M}";
tooltip = true;
tooltip-format = "{}";
};
"cpu" = {
format = "cpu {usage}%";
tooltip = false;
};
"memory" = {
format = "mem {percentage}%";
tooltip = true;
tooltip-format = "{used}/{total}";
};
};
};
style = ''
* {
font-family: "JetBrains Mono", monospace;
font-size: 12px;
font-weight: 500;
border: none;
box-shadow: none;
}
/* Entire bar: fully transparent, no border */
window#waybar {
background: transparent;
color: #eaeaea;
margin: 0;
padding: 0;
}
/* Optional: small edge breathing room (comment out if you want edge-to-edge) */
/* window#waybar { margin: 3px 6px 0 6px; } */
/* Module containers */
.modules-left, .modules-center, .modules-right {
padding: 0;
margin: 0 6px;
}
/* Subtle separators between modules (no boxes) */
.modules-left > widget:not(:first-child),
.modules-center > widget:not(:first-child),
.modules-right > widget:not(:first-child) {
margin-left: 8px;
padding-left: 8px;
border-left: 1px solid rgba(255, 255, 255, 0.08);
}
/* Tightest possible workspaces */
#workspaces { padding: 0; margin: 0; }
#workspaces button {
margin: 0;
padding: 0 3px;
min-width: 0;
border-radius: 0;
background: transparent;
color: #cfcfcf;
}
#workspaces button:hover {
background: rgba(255, 255, 255, 0.06);
}
#workspaces button.active,
#workspaces button.focused {
background: rgba(255, 255, 255, 0.10);
color: #ffffff;
border-bottom: 2px solid #ffffff;
}
#workspaces button.urgent {
background: rgba(255, 80, 80, 0.25);
border-bottom: 2px solid #ff5050;
}
/* Focused window title: single line, no glow */
#window {
padding: 0 6px;
margin: 0;
color: #dedede;
}
/* Sway mode indicator: visible only when active, no bloat */
#mode {
padding: 0 6px;
margin: 0;
background: rgba(255, 255, 255, 0.10);
color: #ffffff;
border-bottom: 2px solid #ffffff;
}
/* Status modules keep them flat and compact */
#clock, #battery, #network, #pulseaudio, #backlight, #cpu, #memory, #temperature, #tray {
padding: 0 6px;
margin: 0;
background: transparent;
color: #eaeaea;
}
/* States (battery, network, audio) */
#battery.charging { color: #c9ffbf; }
#battery.warning:not(.charging) { color: #ffd29a; }
#battery.critical:not(.charging) { color: #ff9a9a; }
#network.disconnected { color: #ffb4b4; }
#pulseaudio.muted { color: #9aa0a6; }
/* Tray: compress icons */
#tray > .passive { opacity: 0.6; }
#tray > .needs-attention { opacity: 1; }
/* Tooltips: clean and readable */
tooltip {
background: rgba(30, 30, 30, 0.95);
border: 1px solid rgba(255, 255, 255, 0.08);
color: #eaeaea;
padding: 6px 8px;
}
/* Remove any leftover borders around everything */
#custom-*, #idle_inhibitor, #privacy, #bluetooth {
border: none;
background: transparent;
margin: 0;
padding: 0 6px;
}
'';
};
};
}

View file

@ -1,74 +0,0 @@
{
config,
lib,
pkgs,
...
}:
with lib; let
cfg = config.local.gui;
in {
config = mkIf cfg.enable {
programs = {
wofi = {
enable = true;
settings = {
prompt = "";
width = "25%";
height = "30%";
};
style = ''
window {
background-color: rgb(0, 0, 0);
color: #eaeaea;
font-family: monospace;
font-size: 12px;
border: none;
border-radius: 0;
padding: 0;
width: 50%; /* half screen width */
}
/* Search input */
#input {
background-color: rgba(0, 0, 0, 0.5);
color: #ffffff;
padding: 4px 6px;
border: none;
border-radius: 0;
margin: 0;
}
/* Results list container */
#inner-box {
background-color: transparent;
margin: 0;
padding: 0;
}
/* Entries */
#entry {
padding: 2px 6px;
margin: 0;
border-radius: 0;
background-color: transparent;
color: #cccccc;
}
/* Text inside entries */
#text {
padding: 0;
margin: 0;
}
/* Scrollbar */
scrollbar {
background: transparent;
}
scrollbar slider {
background: rgba(255, 255, 255, 0.15);
}
'';
};
};
};
}

View file

@ -1,19 +0,0 @@
{
pkgs,
lib,
config,
...
}:
with lib; let
cfg = config.local.apps.mapping;
in {
options.local.apps.mapping = {
enable = mkEnableOption "mapping apps";
};
config = mkIf cfg.enable {
home.packages = with pkgs; [
qgis
openorienteering-mapper
];
};
}

View file

@ -28,7 +28,7 @@ in {
ignoreSpace = true;
};
initContent = import ./zshrc.nix {inherit config lib pkgs;};
initExtra = import ./zshrc.nix {inherit config lib pkgs;};
};
};
}

View file

@ -43,23 +43,29 @@
gaming.enable = true;
yubikey.enable = true;
defaultDesktopPack.enable = true;
firefox.enable = true;
mapping.enable = true;
firefox = {
enable = true;
workspace = "1"; #make this an int later
};
};
gui = {
enable = true;
monitors = {
DP-1 = {
width = "1920";
height = "1080";
rate = "59.94";
primary = true;
position = "0x0";
mode = "1920x1080";
rate = "143.85";
fingerprint = "00ffffffffffff003669a03bd4040000231e0104a5341d783bd005ac5048a627125054bfcf00814081809500714f81c0b30001010101023a801871382d40582c450009252100001e0882805070384d400820f80c09252100001a000000fd003090b4b422010a202020202020000000fc004d53492047323443340a20202001a2020320f14d010304131f120211900e0f1d1e230907078301000065030c001000866f80a0703840403020350009252100001a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e9";
initialI3Workspace = 1;
};
DP-2 = {
width = "1920";
height = "1080";
rate = "143.855";
posX = "1920";
position = "1920x0";
mode = "1920x1080";
rate = "59.94";
fingerprint = "00ffffffffffff0009d1e77845540000061f0104a5351e783a0565a756529c270f5054a56b80d1c0b300a9c08180810081c001010101023a801871382d40582c45000f282100001e000000ff0039324d30303033323031510a20000000fd00324c1e5311010a202020202020000000fc0042656e51204757323438300a20019b02031cf14f901f041303120211011406071516052309070783010000023a801871382d40582c45000f282100001f011d8018711c1620582c25000f282100009f011d007251d01e206e2855000f282100001e8c0ad08a20e02d10103e96000f28210000180000000000000000000000000000000000000000000000000000008d";
initialI3Workspace = 10;
};
};
};
@ -68,17 +74,19 @@
home = {
packages = with pkgs; [
darktable
deluge
(gajim.override {
enableSecrets = true;
# enableJingle = true;
# enableSpelling = true;
enableUPnP = true;
enableAppIndicator = true;
# enableAppIndicator = true;
enableE2E = true;
enableRST = true;
})
gnucash
kdePackages.kdenlive
kdenlive
nmap
qbittorrent
virt-manager
];

View file

@ -48,9 +48,12 @@
enable = true;
monitors = {
eDP-1 = {
width = "1920";
height = "1080";
primary = true;
position = "0x0";
mode = "1920x1080";
rate = "60.00";
fingerprint = "00ffffffffffff000dae0a1400000000291d0104a51f11780328659759548e271e505400000001010101010101010101010101010101363680a0703820403020a60035ad10000018000000fe004e3134304843412d4541450a20000000fe00434d4e0a202020202020202020000000fe004e3134304843412d4541450a200002";
initialI3Workspace = 1;
};
};
};

View file

@ -7,7 +7,6 @@
}:
with lib; {
imports = [
flakes.trivionomicon.nixosModules.default
./modules
];
}

View file

@ -16,14 +16,4 @@
./net.nix
./steam.nix
];
fonts.packages = with pkgs; [
jetbrains-mono
noto-fonts
noto-fonts-cjk-sans
noto-fonts-emoji
noto-fonts-extra
nerd-fonts.fira-code
nerd-fonts.droid-sans-mono
];
}

View file

@ -30,8 +30,6 @@
};
};
trivium.sway.enable = true;
networking = {
hostName = "posixlycorrect";
networkmanager.enable = true;