feat: mango

This commit is contained in:
Elisiei Yehorov 2026-03-14 12:53:43 +01:00
parent 743dd01070
commit 42139b5412
Signed by: elisiei
GPG key ID: BA1D158DCE3DF089
8 changed files with 357 additions and 37 deletions

83
flake.lock generated
View file

@ -85,6 +85,24 @@
} }
}, },
"flake-parts": { "flake-parts": {
"inputs": {
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": {
"lastModified": 1749398372,
"narHash": "sha256-tYBdgS56eXYaWVW3fsnPQ/nFlgWi/Z2Ymhyu21zVM98=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "9305fe4e5c2a6fcf5ba6a3ff155720fbe4076569",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-parts_2": {
"inputs": { "inputs": {
"nixpkgs-lib": [ "nixpkgs-lib": [
"nixvim", "nixvim",
@ -105,7 +123,7 @@
"type": "github" "type": "github"
} }
}, },
"flake-parts_2": { "flake-parts_3": {
"inputs": { "inputs": {
"nixpkgs-lib": [ "nixpkgs-lib": [
"stylix", "stylix",
@ -181,6 +199,28 @@
"type": "github" "type": "github"
} }
}, },
"mangowm": {
"inputs": {
"flake-parts": "flake-parts",
"nixpkgs": [
"nixpkgs"
],
"scenefx": "scenefx"
},
"locked": {
"lastModified": 1773464981,
"narHash": "sha256-zKlImlnnf+iJeUke2gthzvmXu0cl8P7vBNRwvjkbsN4=",
"owner": "mangowm",
"repo": "mango",
"rev": "32c36ba48548f1b30e929c8a739f838bac72db2f",
"type": "github"
},
"original": {
"owner": "mangowm",
"repo": "mango",
"type": "github"
}
},
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1766902047, "lastModified": 1766902047,
@ -197,6 +237,21 @@
"type": "github" "type": "github"
} }
}, },
"nixpkgs-lib": {
"locked": {
"lastModified": 1748740939,
"narHash": "sha256-rQaysilft1aVMwF14xIdGS3sj1yHlI6oKQNBRTF40cc=",
"owner": "nix-community",
"repo": "nixpkgs.lib",
"rev": "656a64127e9d791a334452c6b6606d17539476e2",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nixpkgs.lib",
"type": "github"
}
},
"nixpkgs_2": { "nixpkgs_2": {
"locked": { "locked": {
"lastModified": 1766651565, "lastModified": 1766651565,
@ -215,7 +270,7 @@
}, },
"nixvim": { "nixvim": {
"inputs": { "inputs": {
"flake-parts": "flake-parts", "flake-parts": "flake-parts_2",
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
], ],
@ -263,12 +318,34 @@
"root": { "root": {
"inputs": { "inputs": {
"home-manager": "home-manager", "home-manager": "home-manager",
"mangowm": "mangowm",
"nixpkgs": "nixpkgs", "nixpkgs": "nixpkgs",
"nixvim": "nixvim", "nixvim": "nixvim",
"spicetify-nix": "spicetify-nix", "spicetify-nix": "spicetify-nix",
"stylix": "stylix" "stylix": "stylix"
} }
}, },
"scenefx": {
"inputs": {
"nixpkgs": [
"mangowm",
"nixpkgs"
]
},
"locked": {
"lastModified": 1750785057,
"narHash": "sha256-tGX6j4W91rcb+glXJo43sjPI9zQvPotonknG1BdihR4=",
"owner": "wlrfx",
"repo": "scenefx",
"rev": "3a6cfb12e4ba97b43326357d14f7b3e40897adfc",
"type": "github"
},
"original": {
"owner": "wlrfx",
"repo": "scenefx",
"type": "github"
}
},
"spicetify-nix": { "spicetify-nix": {
"inputs": { "inputs": {
"nixpkgs": "nixpkgs_2", "nixpkgs": "nixpkgs_2",
@ -295,7 +372,7 @@
"base16-helix": "base16-helix", "base16-helix": "base16-helix",
"base16-vim": "base16-vim", "base16-vim": "base16-vim",
"firefox-gnome-theme": "firefox-gnome-theme", "firefox-gnome-theme": "firefox-gnome-theme",
"flake-parts": "flake-parts_2", "flake-parts": "flake-parts_3",
"gnome-shell": "gnome-shell", "gnome-shell": "gnome-shell",
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"

View file

@ -21,6 +21,12 @@
url = "github:nix-community/stylix"; url = "github:nix-community/stylix";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
# mango
mangowm = {
url = "github:mangowm/mango";
inputs.nixpkgs.follows = "nixpkgs";
};
}; };
outputs = inputs @ { outputs = inputs @ {
@ -29,6 +35,7 @@
stylix, stylix,
spicetify-nix, spicetify-nix,
nixvim, nixvim,
mangowm,
... ...
}: { }: {
nixosConfigurations = { nixosConfigurations = {
@ -47,6 +54,7 @@
spicetify-nix.homeManagerModules.spicetify spicetify-nix.homeManagerModules.spicetify
stylix.homeModules.stylix stylix.homeModules.stylix
nixvim.homeModules.nixvim nixvim.homeModules.nixvim
mangowm.hmModules.mango
]; ];
}; };
home-manager.backupFileExtension = "hm-backup"; home-manager.backupFileExtension = "hm-backup";

View file

@ -2,8 +2,9 @@
imports = [ imports = [
./packages.nix ./packages.nix
# hyprland # wm
./modules/wm/sway/default.nix # ./modules/wm/sway/default.nix
./modules/wm/mango/default.nix
# editors # editors
./modules/ide/nvim/default.nix ./modules/ide/nvim/default.nix
@ -18,7 +19,7 @@
# user stuff # user stuff
./modules/user/direnv/default.nix ./modules/user/direnv/default.nix
./modules/user/tofi/default.nix ./modules/user/bemenu/default.nix
./modules/user/dunst/default.nix ./modules/user/dunst/default.nix
./modules/user/git/default.nix ./modules/user/git/default.nix
./modules/user/stylix/default.nix ./modules/user/stylix/default.nix

View file

@ -5,21 +5,31 @@
autoopen = true; autoopen = true;
evaluate_single = true; evaluate_single = true;
header = '' header = ''
''; '';
}; };
}; };

View file

@ -0,0 +1,12 @@
{
programs.bemenu = {
enable = true;
settings = {
border = 0;
list = "5 down";
width-factor = 1.0;
line-height = 25;
center = true;
};
};
}

View file

@ -0,0 +1,219 @@
{pkgs, ...}: let
wallpaperScript = pkgs.writeShellScriptBin "random-wallpaper" ''
pkill -f swaybg 2>/dev/null || true
walp=$(find "$HOME/wallpapers" -type f \( -iname "*.jpg" -o -iname "*.png" \) | shuf -n 1)
[ -n "$walp" ] && ${pkgs.swaybg}/bin/swaybg -m "fill" -i "$walp" &
'';
in {
home.packages = [wallpaperScript];
wayland.windowManager.mango = {
enable = true;
autostart_sh = ''
dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
systemctl --user start pipewire
systemctl --user start xdg-desktop-portal
${wallpaperScript}/bin/random-wallpaper &
'';
settings = ''
blur=0
blur_layer=0
blur_optimized=1
blur_params_num_passes=2
blur_params_radius=5
blur_params_noise=0.02
blur_params_brightness=0.9
blur_params_contrast=0.9
blur_params_saturation=1.2
shadows=0
layer_shadows=0
shadow_only_floating=1
shadows_size=10
shadows_blur=15
shadows_position_x=0
shadows_position_y=0
shadowscolor=0x000000ff
border_radius=0
no_radius_when_single=0
focused_opacity=1.0
unfocused_opacity=0.99
animations=1
layer_animations=1
animation_type_open=slide
animation_type_close=slide
animation_fade_in=1
animation_fade_out=1
tag_animation_direction=1
zoom_initial_ratio=0.3
zoom_end_ratio=0.8
fadein_begin_opacity=0.5
fadeout_begin_opacity=0.8
animation_duration_move=500
animation_duration_open=400
animation_duration_tag=350
animation_duration_close=800
animation_duration_focus=0
animation_curve_open=0.46,1.0,0.29,1
animation_curve_move=0.46,1.0,0.29,1
animation_curve_tag=0.46,1.0,0.29,1
animation_curve_close=0.08,0.92,0,1
animation_curve_focus=0.46,1.0,0.29,1
animation_curve_opafadeout=0.5,0.5,0.5,0.5
animation_curve_opafadein=0.46,1.0,0.29,1
scroller_structs=0
scroller_default_proportion=0.5
scroller_focus_center=0
scroller_prefer_center=0
edge_scroller_pointer_focus=1
scroller_default_proportion_single=1.0
scroller_proportion_preset=0.5,0.8,1.0
new_is_master=1
default_mfact=0.55
default_nmaster=1
smartgaps=0
enable_hotarea=0
ov_tab_mode=0
overviewgappi=5
overviewgappo=30
no_border_when_single=0
axis_bind_apply_timeout=100
focus_on_activate=1
idleinhibit_ignore_visible=0
sloppyfocus=1
warpcursor=1
focus_cross_monitor=0
focus_cross_tag=0
enable_floating_snap=0
snap_distance=30
drag_tile_to_tile=1
repeat_rate=25
repeat_delay=600
numlockon=1
xkb_rules_layout=es,ru
xkb_rules_options=grp:alt_space_toggle
disable_trackpad=0
tap_to_click=1
tap_and_drag=1
drag_lock=1
trackpad_natural_scrolling=0
disable_while_typing=1
left_handed=0
middle_button_emulation=0
swipe_min_threshold=1
mouse_natural_scrolling=0
gappih=3
gappiv=3
gappoh=3
gappov=3
borderpx=0
cursor_size=24
rootcolor=0x000000ff
bordercolor=0x2a2a2aff
focuscolor=0x3a3a3aff
urgentcolor=0x5a5a5aff
tagrule=id:1,layout_name:deck
tagrule=id:2,layout_name:scroller
tagrule=id:3,layout_name:scroller
tagrule=id:4,layout_name:scroller
tagrule=id:5,layout_name:scroller
tagrule=id:6,layout_name:scroller
tagrule=id:7,layout_name:scroller
tagrule=id:8,layout_name:scroller
tagrule=id:9,layout_name:scroller
bind=SUPER,space,spawn,sh -c "WAYLAND_DISPLAY=$WAYLAND_DISPLAY bemenu-run"
bind=SUPER,t,spawn,foot
bind=SUPER,z,spawn,firefox
bind=SUPER,r,spawn,st
bind=SUPER,w,spawn,${wallpaperScript}/bin/random-wallpaper
bind=SUPER+SHIFT,Print,spawn,~/bin/sss screen
bind=SUPER,Print,spawn,~/bin/sss area
bind=SUPER,q,killclient,
bind=ALT,backslash,togglefloating,
bind=SUPER,s,toggle_scratchpad
bind=SUPER,Tab,focusstack,next
bind=SUPER,Left,focusdir,left
bind=SUPER,Right,focusdir,right
bind=SUPER,Up,focusdir,up
bind=SUPER,Down,focusdir,down
bind=CTRL+ALT,Left,resizewin,-50,+0
bind=CTRL+ALT,Right,resizewin,+50,+0
bind=CTRL+ALT,Up,resizewin,+0,-50
bind=CTRL+ALT,Down,resizewin,+0,+50
bind=CTRL+SHIFT,Left,movewin,-50,+0
bind=CTRL+SHIFT,Right,movewin,+50,+0
bind=CTRL+SHIFT,Up,movewin,+0,-50
bind=CTRL+SHIFT,Down,movewin,+0,+50
bind=SUPER,1,view,1,0
bind=SUPER,2,view,2,0
bind=SUPER,3,view,3,0
bind=SUPER,4,view,4,0
bind=SUPER,5,view,5,0
bind=SUPER,6,view,6,0
bind=SUPER,7,view,7,0
bind=SUPER,8,view,8,0
bind=SUPER,9,view,9,0
bind=SUPER,0,view,10,0
bind=SUPER+SHIFT,1,tag,1,0
bind=SUPER+SHIFT,2,tag,2,0
bind=SUPER+SHIFT,3,tag,3,0
bind=SUPER+SHIFT,4,tag,4,0
bind=SUPER+SHIFT,5,tag,5,0
bind=SUPER+SHIFT,6,tag,6,0
bind=SUPER+SHIFT,7,tag,7,0
bind=SUPER+SHIFT,8,tag,8,0
bind=SUPER+SHIFT,9,tag,9,0
bind=SUPER+SHIFT,0,tag,10,0
bind=ALT+SHIFT,Left,focusmon,left
bind=ALT+SHIFT,Right,focusmon,right
bind=SUPER+ALT,Left,tagmon,left
bind=SUPER+ALT,Right,tagmon,right
bind=ALT+SHIFT,X,incgaps,1
bind=ALT+SHIFT,Z,incgaps,-1
bind=ALT+SHIFT,R,togglegaps
mousebind=SUPER,btn_left,moveresize,curmove
mousebind=SUPER,btn_right,moveresize,curresize
mousebind=NONE,btn_left,toggleoverview,1
axisbind=SUPER,UP,viewtoleft_have_client
axisbind=SUPER,DOWN,viewtoright_have_client
cursor_size=24
cursor_theme=macOS
exec=${wallpaperScript}/bin/random-wallpaper
exec-once=~/.config/mango/autostart.sh
'';
};
home.sessionVariables = {
XCURSOR_THEME = "macOS";
XCURSOR_SIZE = "24";
XDG_CURRENT_DESKTOP = "mango";
BEMENU_BACKEND = "wayland";
};
}

View file

@ -2,16 +2,12 @@
environment.sessionVariables = { environment.sessionVariables = {
WLR_NO_HARDWARE_CURSORS = "1"; WLR_NO_HARDWARE_CURSORS = "1";
NIXOS_OZONE_WL = "1"; NIXOS_OZONE_WL = "1";
XDG_CURRENT_DESKTOP = "sway"; XDG_CURRENT_DESKTOP = "mango";
WLR_DRM_NO_ATOMIC = "1";
}; };
security.polkit.enable = true; security.polkit.enable = true;
programs.sway = {
enable = true;
wrapperFeatures.gtk = true;
};
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
# essential # essential
curl curl
@ -22,6 +18,9 @@
xdg-desktop-portal xdg-desktop-portal
gnumake gnumake
git-credential-manager git-credential-manager
pipewire
pulseaudio
xdg-desktop-portal-wlr
# notifications # notifications
libnotify libnotify

View file

@ -25,7 +25,7 @@
enable = true; enable = true;
settings = rec { settings = rec {
initial_session = { initial_session = {
command = "${pkgs.sway}/bin/sway --unsupported-gpu"; command = "${pkgs.mangowc}/bin/mango";
user = "elisiei"; user = "elisiei";
}; };
default_session = initial_session; default_session = initial_session;
@ -33,22 +33,16 @@
}; };
console.keyMap = "es"; console.keyMap = "es";
programs.dconf.enable = true;
xdg = { xdg = {
portal = { portal = {
config.common.default = "*";
enable = true; enable = true;
wlr.enable = true;
extraPortals = with pkgs; [ extraPortals = with pkgs; [
xdg-desktop-portal-wlr xdg-desktop-portal-wlr
xdg-desktop-portal-gtk
]; ];
}; };
}; };
#environment.etc."xdg/sessions/hyprland.desktop".text = ''
# [Desktop Entry]
# Name=Hyprland
# Comment=Hyprland Wayland Compositor
# Exec=Hyprland
# Type=Application
#'';
} }