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

View file

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

View file

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

View file

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

View file

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

View file

@ -10,6 +10,14 @@ in {
options.local.apps.firefox = { options.local.apps.firefox = {
enable = mkEnableOption "firefox settings"; 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 { makeDefaultBrowser = mkOption {
type = types.bool; type = types.bool;
default = true; default = true;
@ -22,6 +30,10 @@ in {
config = mkIf cfg.enable (mkMerge [ config = mkIf cfg.enable (mkMerge [
{ {
programs.firefox.enable = true; 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 { (mkIf cfg.makeDefaultBrowser {

View file

@ -38,7 +38,7 @@ in {
maxCacheTtl = 3600 * 6; maxCacheTtl = 3600 * 6;
maxCacheTtlSsh = 3600 * 6; maxCacheTtlSsh = 3600 * 6;
pinentry.package = pkgs.pinentry-emacs; pinentryPackage = pkgs.pinentry-emacs;
}; };
accounts.email.accounts = { 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,55 +9,109 @@ with lib; let
monitorType = {setName}: ( monitorType = {setName}: (
types.submodule ({name ? null, ...}: { types.submodule ({name ? null, ...}: {
options = { options = {
width = mkOption { monitorId = mkOption {
type = types.str; type = types.str;
default = "1920"; example = "DP-1";
example = "1920"; readOnly = true;
internal = true;
}; };
height = mkOption { primary = mkOption {
type = types.bool;
default = false;
description = "is primary monitor";
example = "true";
};
position = mkOption {
type = types.str; type = types.str;
default = "1080"; example = "0x0";
example = "1080"; };
mode = mkOption {
type = types.str;
description = "resolution";
default = "1920x1080";
example = "1920x1080";
}; };
rate = mkOption { rate = mkOption {
type = types.str; type = types.str;
description = "refresh rate"; description = "refresh rate";
example = "143.85"; example = "143.85";
}; };
posX = mkOption { rotate = mkOption {
type = types.str; type = types.str;
description = "x axis position"; default = "normal";
default = "0"; example = "left";
example = "0";
}; };
posY = mkOption { fingerprint = mkOption {
type = types.str; type = types.str;
description = "y axis position"; example = "00ffffffffffff003669a03bd4040000231e0104a5341d783bd005ac5048a627125054bfcf00814081809500714f81c0b30001010101023a801871382d40582c450009252100001e0882805070384d400820f80c09252100001a000000fd003090b4b422010a202020202020000000fc004d53492047323443340a20202001a2020320f14d010304131f120211900e0f1d1e230907078301000065030c001000866f80a0703840403020350009252100001a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e9";
default = "0";
example = "0";
}; };
initialI3Workspace = mkOption {
type = types.nullOr types.int;
default = null;
example = 1;
};
};
config = optionalAttrs setName {
# make this better later
monitorId = name;
}; };
}) })
); );
in { in {
options.local.gui = { options.local.gui = {
enable = mkEnableOption "GUI settings"; enable = mkEnableOption "GUI settings";
primaryMonitor = mkOption {
type = monitorType {setName = false;};
readOnly = true;
internal = true;
};
monitors = mkOption { monitors = mkOption {
type = types.attrsOf (monitorType {setName = true;}); type = types.attrsOf (monitorType {setName = true;});
}; };
displayBatteryLevel = mkOption {
type = types.bool;
default = false;
description = "show battery level on polybar";
example = "true";
};
}; };
imports = [ imports = [
./autorandr.nix
./fonts.nix ./fonts.nix
./i3.nix
./polybar.nix
./startx.nix
./picom.nix
./theme.nix ./theme.nix
./sway.nix
./waybar.nix
./wofi.nix
]; ];
config = mkIf cfg.enable { 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.";
}
];
local.gui.primaryMonitor = head primaryMonitors;
xsession = {
enable = true;
windowManager.i3.enable = true;
};
programs.autorandr.enable = true;
services = { services = {
mako.enable = true; dunst.enable = true;
betterlockscreen.enable = true;
polybar.enable = true;
picom.enable = true;
}; };
xdg = { xdg = {

View file

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

View file

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

View file

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

View file

@ -16,14 +16,4 @@
./net.nix ./net.nix
./steam.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 = { networking = {
hostName = "posixlycorrect"; hostName = "posixlycorrect";
networkmanager.enable = true; networkmanager.enable = true;