right before reorganizing - i3 stable

This commit is contained in:
alisceon 2025-08-24 16:05:54 +02:00
parent 4976ff2b34
commit 534652294a
12 changed files with 755 additions and 87 deletions

View file

@ -45,11 +45,13 @@
modules = sharedModules ++ [
./hosts/common/workstation.nix
./hosts/electra/configuration.nix
./hosts/common/wm/sway.nix
home-manager.nixosModules.home-manager
({ config, ...}: {
home-manager.users.alisceon.imports = [
./home/alisceon/base.nix
./home/alisceon/workstation.nix
./home/wm/sway.nix
];
}) # end home-manager
]; # end modules
@ -59,11 +61,13 @@
modules = sharedModules ++ [
./hosts/common/workstation.nix
./hosts/tower/configuration.nix
./hosts/common/wm/gnome.nix
home-manager.nixosModules.home-manager
({ config, ...}: {
home-manager.users.alisceon.imports = [
./home/alisceon/base.nix
./home/alisceon/workstation.nix
./home/wm/gnome.nix
];
}) # end home-manager
]; # end modules

View file

@ -5,7 +5,8 @@
# NixOS commands
nixoss = "sudo nixos-rebuild switch --flake .#${hostName}";
nixost = "sudo nixos-rebuild dry-build --flake .#${hostName}";
nixost = "sudo nixos-rebuild test --flake .#${hostName}";
nixosdb = "sudo nixos-rebuild dry-build --flake .#${hostName}";
# Development commands
devt = "devenv test";

View file

@ -4,7 +4,6 @@
firefox = {
enable = true;
nativeMessagingHosts = [
pkgs.gnome-browser-connector
pkgs.firefoxpwa
];
}; # end firefox
@ -36,55 +35,4 @@
services.syncthing = {
enable = true;
};
dconf.enable = true;
dconf.settings = {
"org/gnome/desktop/background" = {
color-shading-type = "solid";
picture-options = "zoom";
primary-color = "#000000000000";
secondary-color = "#000000000000";
picture-uri = "file:///home/alisceon/Pictures/system/bg.png";
picture-uri-dark = "file:///home/alisceon/Pictures/system/bg.png";
};
"org/gnome/mutter" = {
auto-maximize = true;
};
"org/gnome/desktop/interface" = {
accent-color = "red";
color-scheme = "prefer-dark";
};
"org/gnome/shell" = {
disable-user-extensions = false;
enabled-extensions = [ pkgs.gnomeExtensions.ddterm.extensionUuid ];
favorite-apps = [
"org.gnome.Nautilus.desktop"
"firefox.desktop"
"code.desktop"
"obsidian.desktop"
"discord.desktop"
"signal.desktop"
];
};
"org/gnome/shell/keybindings" = {
show-screenshot-ui = [ "<Shift><Super>s" ];
};
"org/gnome/settings-daemon/plugins/media-keys" = {
custom-keybindings = [
"/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/"
];
};
"org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0" = {
name = "GNOME Console";
command = "kgx";
binding = "<Shift><Super>Return";
};
"com/github/amezin/ddterm" = {
ddterm-toggle-hotkey = [ "<Super>Return" ];
window-monitor = "focus";
hide-when-focus-lost = true;
hide-window-on-esc = true;
tab-policy = "never";
panel-icon-type = "none";
};
}; # end dconf.settings
} # end file

61
home/wm/gnome.nix Normal file
View file

@ -0,0 +1,61 @@
{ pkgs, config, hostName, lib, ... }: {
programs = {
firefox = {
nativeMessagingHosts = [
pkgs.gnome-browser-connector
];
}; # end firefox
}; # end programs
dconf.enable = true;
dconf.settings = {
"org/gnome/desktop/background" = {
color-shading-type = "solid";
picture-options = "zoom";
primary-color = "#000000000000";
secondary-color = "#000000000000";
picture-uri = "file:///home/alisceon/Pictures/system/bg.png";
picture-uri-dark = "file:///home/alisceon/Pictures/system/bg.png";
};
"org/gnome/mutter" = {
auto-maximize = true;
};
"org/gnome/desktop/interface" = {
accent-color = "red";
color-scheme = "prefer-dark";
};
"org/gnome/shell" = {
disable-user-extensions = false;
enabled-extensions = [ pkgs.gnomeExtensions.ddterm.extensionUuid ];
favorite-apps = [
"org.gnome.Nautilus.desktop"
"firefox.desktop"
"code.desktop"
"obsidian.desktop"
"discord.desktop"
"signal.desktop"
];
};
"org/gnome/shell/keybindings" = {
show-screenshot-ui = [ "<Shift><Super>s" ];
};
"org/gnome/settings-daemon/plugins/media-keys" = {
custom-keybindings = [
"/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/"
];
};
"org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0" = {
name = "GNOME Console";
command = "kgx";
binding = "<Shift><Super>Return";
};
"com/github/amezin/ddterm" = {
ddterm-toggle-hotkey = [ "<Super>Return" ];
window-monitor = "focus";
hide-when-focus-lost = true;
hide-window-on-esc = true;
tab-policy = "never";
panel-icon-type = "none";
};
}; # end dconf.settings
} # end file

18
home/wm/hyprland.nix Normal file
View file

@ -0,0 +1,18 @@
{ pkgs, config, hostName, lib, ... }: {
wayland.windowManager.hyprland.settings = {
decoration = {
shadow_offset = "0 5";
"col.shadow" = "rgba(00000099)";
};
"$mod" = "SUPER";
bindm = [
# mouse movements
"$mod, mouse:272, movewindow"
"$mod, mouse:273, resizewindow"
"$mod ALT, mouse:272, resizewindow"
];
};
} # end file

560
home/wm/sway.nix Normal file
View file

@ -0,0 +1,560 @@
{ pkgs, config, hostName, lib, ... }:
let
# execs
lock = "${pkgs.swaylock}/bin/swaylock --daemonize";
term = "${pkgs.foot}/bin/foot";
dmenu = "${pkgs.rofi-wayland}/bin/rofi -show drun";
# keybinds
key_mod = "Mod4";
key_left = "Left";
key_right = "Right";
key_up = "Up";
key_down = "Down";
# style
style_font = "Inconsolata";
style_font_sz = "12";
style_font_bold = "${style_font}-Bold";
color_blue_1 = "#99c1f1";
color_blue_2 = "#62a0ea";
color_blue_3 = "#3584e4";
color_blue_4 = "#1c71d8";
color_blue_5 = "#1a5fb4";
color_green_1 = "#8ff0a4";
color_green_2 = "#57e389";
color_green_3 = "#33d17a";
color_green_4 = "#2ec27e";
color_green_5 = "#26a269";
color_yellow_1 = "#f9f06b";
color_yellow_2 = "#f8e45c";
color_yellow_3 = "#f6d32d";
color_yellow_4 = "#f5c211";
color_yellow_5 = "#e5a50a";
color_orange_1 = "#ffbe6f";
color_orange_2 = "#ffa348";
color_orange_3 = "#ff7800";
color_orange_4 = "#e66100";
color_orange_5 = "#c64600";
color_red_1 = "#f66151";
color_red_2 = "#ed333b";
color_red_3 = "#e01b24";
color_red_4 = "#c01c28";
color_red_5 = "#a51d2d";
color_purple_1 = "#dc8add";
color_purple_2 = "#c061cb";
color_purple_3 = "#9141ac";
color_purple_4 = "#813d9c";
color_purple_5 = "#613583";
color_brown_1 = "#cdab8f";
color_brown_2 = "#b5835a";
color_brown_3 = "#986a44";
color_brown_4 = "#865e3c";
color_brown_5 = "#63452c";
color_light_1 = "#ffffff";
color_light_2 = "#f6f5f4";
color_light_3 = "#d8d8d8";
color_light_4 = "#c0c0c0";
color_light_5 = "#9b9b9b";
color_dark_1 = "#757575";
color_dark_2 = "#666666";
color_dark_3 = "#494949";
color_dark_4 = "#333333";
color_dark_5 = "#000000";
color_f_bg = color_dark_3;
color_f_text = color_light_1;
color_uf_bg = color_dark_4;
color_uf_text = color_light_4;
color_alert_bg = color_red_5;
color_alert_text = color_light_1;
color_inv_bg = color_light_4;
color_inv_text = color_dark_5;
# other
display = status: "swaymsg 'output * power ${status}'";
in
{
wayland.windowManager.sway = {
enable = true;
wrapperFeatures.gtk = true; # Fixes common issues with GTK 3 apps
config = {
modifier = "${key_mod}";
bars = [{
command = "${pkgs.waybar}/bin/waybar";
}];
fonts = {
names = ["${style_font}"];
size = style_font_sz;
};
input = {
"type:touchpad" = {
dwt = "enabled";
tap = "enabled";
natural_scroll = "disabled";
middle_emulation = "enabled";
click_method = "clickfinger";
clickfinger_button_map = "lrm";
};
"type:mouse" = {
natural_scroll = "disabled";
};
"*" = {
xkb_layout = "se";
};
}; # end input
keybindings = {
# Basic
"${key_mod}+Return" = "exec ${term}";
"${key_mod}+d" = "exec ${dmenu}";
"${key_mod}+Shift+q" = "kill";
"${key_mod}+L" = "exec ${lock}";
#Screenshot region
"${key_mod}+Shift+s" = ''
bash -c '\
${pkgs.slurp}/bin/slurp | \
${pkgs.grim}/bin/grim -g - \
~/Pictures/Screenshots_${hostName}/$(date +"%Y-%m-%d-%H%M%S.png") | \
${pkgs.wl-clipboard}/bin/wl-copy -t image/png \
'
'';
# Workspaces
"${key_mod}+Tab" = "workspace next";
"${key_mod}+Shift+Tab" = "workspace prev";
"${key_mod}+1" = "workspace number 1";
"${key_mod}+2" = "workspace number 2";
"${key_mod}+3" = "workspace number 3";
"${key_mod}+4" = "workspace number 4";
"${key_mod}+5" = "workspace number 5";
"${key_mod}+6" = "workspace number 6";
"${key_mod}+7" = "workspace number 7";
"${key_mod}+8" = "workspace number 8";
"${key_mod}+9" = "workspace number 9";
"${key_mod}+Shift+period" = "move container to workspace next; workspace next";
"${key_mod}+Shift+comma" = "move container to workspace prev; workspace prev";
"${key_mod}+Shift+1" = "move container to workspace number 1; workspace 1";
"${key_mod}+Shift+2" = "move container to workspace number 2; workspace 2";
"${key_mod}+Shift+3" = "move container to workspace number 3; workspace 3";
"${key_mod}+Shift+4" = "move container to workspace number 4; workspace 4";
"${key_mod}+Shift+5" = "move container to workspace number 5; workspace 5";
"${key_mod}+Shift+6" = "move container to workspace number 6; workspace 6";
"${key_mod}+Shift+7" = "move container to workspace number 7; workspace 7";
"${key_mod}+Shift+8" = "move container to workspace number 8; workspace 8";
"${key_mod}+Shift+9" = "move container to workspace number 9; workspace 9";
# Focus
"${key_mod}+${key_left}" = "focus left";
"${key_mod}+${key_down}" = "focus down";
"${key_mod}+${key_up}" = "focus up";
"${key_mod}+${key_right}" = "focus right";
"${key_mod}+Ctrl+${key_left}" = "move workspace to output left";
"${key_mod}+Ctrl+${key_down}" = "move workspace to output down";
"${key_mod}+Ctrl+${key_up}" = "move workspace to output up";
"${key_mod}+Ctrl+${key_right}" = "move workspace to output right";
"${key_mod}+Shift+${key_left}" = "move left";
"${key_mod}+Shift+${key_down}" = "move down";
"${key_mod}+Shift+${key_up}" = "move up";
"${key_mod}+Shift+${key_right}" = "move right";
# System
"XF86AudioRaiseVolume" = "exec 'pactl set-sink-volume @DEFAULT_SINK@ +1%'";
"XF86AudioLowerVolume" = "exec 'pactl set-sink-volume @DEFAULT_SINK@ -1%'";
"XF86AudioMute" = "exec 'pactl set-sink-mute @DEFAULT_SINK@ toggle'";
"XF86MonBrightnessUp" = "exec ${pkgs.light}/bin/light -A 10";
"XF86MonBrightnessDown" = "exec ${pkgs.light}/bin/light -U 10";
}; # end keybindings
window = {
titlebar = false;
};
colors = {
background = color_dark_5;
focused = {
border = color_f_bg;
background = color_f_bg;
text = color_light_1;
indicator = color_f_bg;
childBorder = color_f_bg;
};
focusedInactive = {
border = color_f_bg;
background = color_f_bg;
text = color_light_1;
indicator = color_f_bg;
childBorder = color_f_bg;
};
unfocused = {
border = color_uf_bg;
background = color_uf_bg;
text = color_uf_text;
indicator = color_uf_bg;
childBorder = color_uf_bg;
};
urgent = {
border = color_alert_bg;
background = color_alert_bg;
text = color_alert_text;
indicator = color_alert_bg;
childBorder = color_alert_bg;
};
placeholder = {
border = color_dark_3;
background = color_dark_3;
text = color_light_4;
indicator = color_dark_3;
childBorder = color_dark_3;
};
}; # end colors
};
};
services = {
swayidle = {
enable = true;
timeouts = [
{
timeout = 120;
command = "${pkgs.libnotify}/bin/notify-send 'Locking in 5 seconds' -t 5000";
}
{
timeout = 125;
command = lock;
}
{
timeout = 125;
command = display "off";
resumeCommand = display "on";
}
{
timeout = 600;
command = "${pkgs.systemd}/bin/systemctl suspend";
}
]; # end timeouts
events = [
{
event = "before-sleep";
command = (display "off") + "; " + lock;
}
{
event = "after-resume";
command = display "on";
}
{
event = "lock";
command = (display "off") + "; " + lock;
}
{
event = "unlock";
command = display "on";
}
]; # end events
}; # end swayidle
}; # end services
programs = {
rofi = {
enable = true;
font = "${style_font} ${style_font_sz}";
theme = let
inherit (config.lib.formats.rasi) mkLiteral;
in {
"*" = {
bg = mkLiteral color_uf_bg;
fg = mkLiteral color_f_text;
ac = mkLiteral color_f_bg;
background-color = mkLiteral "transparent";
};
"#window" = {
background-color = mkLiteral "@bg";
location = mkLiteral "center";
width = mkLiteral "30%";
};
"#prompt" = {
text-color = mkLiteral "@fg";
};
"#textbox-prompt-colon" = {
text-color = mkLiteral "@fg";
};
"#entry" = {
text-color = mkLiteral "@fg";
blink = mkLiteral "true";
};
"#inputbar" = {
children = mkLiteral "[ prompt, entry ]";
text-color = mkLiteral "@fg";
padding = mkLiteral "5px";
};
"#listview" = {
columns = mkLiteral "1";
lines = mkLiteral "6";
cycle = mkLiteral "true";
dynamic = mkLiteral "true";
};
"#mainbox" = {
border = mkLiteral "3px";
border-color = mkLiteral "@ac";
children = mkLiteral "[ inputbar, listview ]";
padding = mkLiteral "10px";
};
"#element" = {
text-color = mkLiteral "@fg";
padding = mkLiteral "5px";
};
"#element-icon" = {
text-color = mkLiteral "@fg";
size = mkLiteral "32px";
};
"#element-text" = {
text-color = mkLiteral "@fg";
padding = mkLiteral "5px";
};
"#element selected" = {
border = mkLiteral "3px";
border-color = mkLiteral "@ac";
text-color = mkLiteral "@fg";
background-color = mkLiteral "@ac";
};
}; # end theme
}; # end rofi
waybar = {
enable = true;
settings = {
mainBar = {
layer = "bottom";
position = "top";
height = 32;
spacing = 0;
modules-left = [
"sway/workspaces"
"sway/window"
];
modules-center = [
"clock"
];
modules-right = [
"network"
"pulseaudio"
"battery"
"tray"
];
"sway/workspaces" = {
on-click = "activate";
sort-by-number = true;
format = "{value}";
};
"sway/window" = {
max-length = 64;
};
"tray" = {
icon-size = 13;
spacing = 8;
};
"clock" = {
interval = 60;
tooltip = false;
format = "{:%R}";
format-alt = "{:%a, %Y-%m-%d}";
};
"battery" = {
states = {
critical = 10;
warning = 20;
good = 90;
full = 100;
over = 101;
};
interval = 30;
format = "Bat {capacity}%";
format-charging = "Bat {capacity}%";
format-plugged = "Bat {capacity}%";
};
"network" = {
format-wifi = "WiFi up";
format-ethernet = "eth up";
tooltip-format = "{ifname} = {ipaddr}/{cidr}";
format-linked = "{ifname} (no ip)";
format-disconnected = "No network";
format-alt = "{essid}: {ipaddr}";
interval = 10;
};
"pulseaudio" = {
# "scroll-step" = 1; # %; can be a float
format = "Sound: {volume}%";
format-muted = "Sound Muted";
};
}; # end mainbar
}; # end settings
style = ''
* {
font-family: ${style_font_bold};
font-size: ${style_font_sz}pt;
}
window#waybar {
color: ${color_f_text};
background-color: ${color_uf_bg};
transition-property: background-color;
transition-duration: .5s;
}
window#waybar.hidden {
opacity: 0.2;
}
/*
window#waybar.empty {
background-color: transparent;
}
window#waybar.solo {
background-color: ${color_purple_1};
}
*/
button {
box-shadow: inset 0 -8px transparent;
border: none;
border-radius: 0;
}
button:hover {
color: ${color_f_text};
background: ${color_f_bg};
}
#workspaces button {
color: ${color_uf_text};
background-color: ${color_uf_bg};
}
#workspaces button:hover {
color: ${color_f_text};
background: ${color_f_bg};
}
#workspaces button.focused {
color: ${color_inv_text};
background-color: ${color_inv_bg};
}
#workspaces button.urgent {
color: ${color_alert_text};
background-color: ${color_alert_bg};
}
#battery,
#clock,
#network,
#pulseaudio,
#tray,
#window,
#workspaces {
margin: 0 2px;
}
.modules-left > widget:first-child > #workspaces {
margin-left: 0;
}
.modules-right > widget:last-child > #workspaces {
margin-right: 0;
}
#battery {
color: ${color_f_text};
background-color: transparent;
}
#battery.critical.discharging {
animation: blink 1s infinite;
color: ${color_red_2};
}
#battery.warning.discharging {
animation: blink 1s infinite;
color: ${color_orange_2};
}
#battery.good {
animation: none;
color: ${color_f_text};
}
#battery.full.charging {
color: ${color_green_2};
}
#battery.over.charging {
color: ${color_green_2};
}
#clock {
color: ${color_f_text};
background-color: transparent;
}
label:focus {
color: ${color_f_text};
background-color: transparent;
}
#network {
color: ${color_f_text};
background-color: transparent;
}
#network.disconnected {
color: ${color_f_text};
background-color: transparent;
}
#pulseaudio {
color: ${color_f_text};
background-color: transparent;
}
#pulseaudio.muted {
color: ${color_f_text};
background-color: transparent;
}
#tray {
background-color: transparent;
border-bottom: 3px solid ${color_f_text};
}
#tray > .passive {
-gtk-icon-effect: dim;
}
#tray > .needs-attention {
-gtk-icon-effect: highlight;
background-color: transparent;
}
''; # end style
}; # end waybar
swaylock = {
enable = true;
settings = {
color = color_uf_bg;
font = style_font;
font-size = style_font_sz;
ignore-empty-password = true;
indicator-caps-lock = true;
indicator-radius = 50;
indicator-thickness = 10;
}; # end settings
}; # end swaylock
}; # end programs
} # end file

33
hosts/common/wm/gnome.nix Normal file
View file

@ -0,0 +1,33 @@
{ config, pkgs, ... }:
{
security.sudo.wheelNeedsPassword = false;
services = {
displayManager = {
gdm.enable = true;
gdm.wayland = true;
};
desktopManager.gnome.enable = true;
gnome = {
gnome-keyring.enable = true;
gnome-initial-setup.enable = false;
};
}; # end services
environment = {
gnome.excludePackages = with pkgs; [
evolution
geary
gnome-contacts
gnome-music
gnome-user-docs
gnome-tour
gnome-weather
gnome-maps
gnome-calendar
gnome-initial-setup
gnome-clocks
]; # end gnome.excludePackages
}; # end environment
} #end file

View file

@ -0,0 +1,21 @@
{ config, pkgs, lib, ... }:
{
programs.hyprland = {
enable = true;
withUWSM = true; # recommended for most users
xwayland.enable = true; # Xwayland can be disabled.
};
services.greetd = {
enable = true;
settings = {
default_session = {
command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --cmd hyprland";
user = "alisceon";
};
};
};
environment.systemPackages = with
pkgs; [
kitty
];
}

40
hosts/common/wm/sway.nix Normal file
View file

@ -0,0 +1,40 @@
{ config, pkgs, lib, ... }:
{
environment.systemPackages = with pkgs; [
grim # screenshot functionality
slurp # screenshot functionality
wl-clipboard # wl-copy and wl-paste for copy/paste from stdin / stdout
mako # notification system developed by swaywm maintainer
rofi-wayland
waybar
];
# enable Sway window manager
programs = {
sway = {
enable = true;
wrapperFeatures.gtk = true;
}; # end sway
light = {
enable = true;
}; # end light
}; # end programs
security.polkit.enable = true;
services = {
greetd = {
enable = true;
settings = {
default_session = {
command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --cmd sway";
user = "greeter";
}; # end default_session
}; # end settings
}; # end greetd
logind = {
lidSwitch = "suspend";
lidSwitchExternalPower = "suspend";
}; # end logind
gnome.gnome-keyring.enable = true;
}; # end services
users.users.alisceon.extraGroups = [ "video" ];
}

View file

@ -61,19 +61,11 @@
obsidian
gparted
]; # end systemPackages
gnome.excludePackages = with pkgs; [
evolution
geary
gnome-contacts
gnome-music
gnome-user-docs
gnome-tour
gnome-weather
gnome-maps
gnome-calendar
gnome-initial-setup
gnome-clocks
]; # end gnome.excludePackages
}; # end environment
fonts = {
enableDefaultPackages = true;
packages = with pkgs; [
inconsolata
]; # end packages
}; # end fonts
} #end file

View file

@ -13,26 +13,6 @@
luks.devices."luks-654125f4-7b26-408d-b1b5-d31648ec8770".device = "/dev/disk/by-uuid/654125f4-7b26-408d-b1b5-d31648ec8770";
verbose = false;
};
plymouth = {
enable = true;
theme = "rings";
themePackages = with pkgs; [
(adi1090x-plymouth-themes.override {
selected_themes = [ "rings" ];
})
];
};
consoleLogLevel = 3;
kernelParams = [
"quiet"
"splash"
"boot.shell_on_fail"
"udev.log_priority=3"
"rd.systemd.show_status=auto"
"mem_sleep_default=s2idle"
];
loader.timeout = 0;
#resumeDevice = "/dev/disk/by-uuid/c49249b9-0d68-44af-97e0-e399c8409408";
}; # end boot
systemd.services = {

10
nixos/default.nix Normal file
View file

@ -0,0 +1,10 @@
{ ... }: {
imports = [
./hardware
./programs
./services
./system
./themes
./virtual
];
}