switch to hyprland

This commit is contained in:
Mars 2024-05-28 04:08:06 -04:00
parent 80b6273752
commit f74047f29b
Signed by: pupbrained
GPG key ID: 0FF5B8826803F895
14 changed files with 1178 additions and 810 deletions

View file

@ -1,8 +1,5 @@
# This file was generated by nvfetcher, please do not modify it manually.
{
fetchFromGitHub,
dockerTools,
}: {
{fetchFromGitHub}: {
linux-wallpaperengine-latest = {
pname = "linux-wallpaperengine-latest";
version = "13cc080410444ea72cceebdd5ea0ae7c23dd2270";

View file

@ -1,29 +1,38 @@
{
inputs = let
mkCustomUrl = url: {
inherit url;
};
mkCustomUrl = url: {inherit url;};
mkInput = url: {
url = "github:${url}";
};
mkInput = url: {url = "github:${url}";};
mkFollowingNixpkgs = url: {
url = "github:${url}";
inputs.nixpkgs.follows = "nixpkgs";
};
mkFollowing = url: input: {
url = "github:${url}";
inputs.${input}.follows = input;
};
mkWithSubmodules = url: {
inherit url;
submodules = true;
type = "git";
};
in {
agenix = mkInput "ryantm/agenix";
catppuccin = mkInput "catppuccin/nix";
chaotic = mkInput "chaotic-cx/nyx/nyxpkgs-unstable";
hyprland = mkWithSubmodules "https://github.com/hyprwm/Hyprland";
hyprland-plugins = mkFollowing "hyprwm/hyprland-plugins" "hyprland";
impermanence = mkInput "nix-community/impermanence";
nixpkgs = mkInput "arianvp/nixpkgs/soft-reboot";
nix-colors = mkInput "Misterio77/nix-colors";
nixpkgs = mkInput "NixOS/nixpkgs/nixos-unstable";
nix-super = mkCustomUrl "git+https://git.privatevoid.net/max/nix-super.git";
nixvim = mkInput "pupbrained/nixvim";
schizofox = mkInput "schizofox/schizofox";
sops-nix = mkInput "Mic92/sops-nix";
treefmt-nix = mkInput "numtide/treefmt-nix";
xmonad-contrib = mkInput "xmonad/xmonad-contrib";
home-manager = mkFollowingNixpkgs "nix-community/home-manager";
nix-index-database = mkFollowingNixpkgs "nix-community/nix-index-database";
@ -50,8 +59,43 @@
overlays = [
snowfall-flake.overlays.default
(_: _: {
(_final: prev: {
nixSuper = nix-super.packages.${system}.default;
ccacheWrapper = prev.ccacheWrapper.override {
extraConfig = ''
export CCACHE_COMPRESS=1
export CCACHE_DIR="${config.programs.ccache.cacheDir}"
export CCACHE_UMASK=007
if [ ! -d "$CCACHE_DIR" ]; then
echo "====="
echo "Directory '$CCACHE_DIR' does not exist"
echo "Please create it with:"
echo " sudo mkdir -m0770 '$CCACHE_DIR'"
echo " sudo chown root:nixbld '$CCACHE_DIR'"
echo "====="
exit 1
fi
if [ ! -w "$CCACHE_DIR" ]; then
echo "====="
echo "Directory '$CCACHE_DIR' is not accessible for user $(whoami)"
echo "Please verify its access permissions"
echo "====="
exit 1
fi
'';
};
picom = prev.picom.overrideAttrs {
src = prev.fetchFromGitHub {
owner = "yshui";
repo = "picom";
rev = "94faacbd4ac917cca5abac3ac5c539f5fe1dc61d";
hash = "sha256-KfMy8lV3FMS+AWDozlpPRkXX1eZCWsj39Y5T8q+c9Bs=";
fetchSubmodules = true;
};
};
})
];
@ -65,21 +109,20 @@
};
homes.modules = [
chaotic.homeManagerModules.default
catppuccin.homeManagerModules.catppuccin
chaotic.homeManagerModules.default
hyprland.homeManagerModules.default
nix-colors.homeManagerModules.default
nix-index-database.hmModules.nix-index
schizofox.homeManagerModules.default
];
systems.modules.nixos =
[
agenix.nixosModules.default
catppuccin.nixosModules.catppuccin
chaotic.nixosModules.default
impermanence.nixosModules.impermanence
xmonad-contrib.modernise.${system}
]
++ xmonad-contrib.nixosModules;
systems.modules.nixos = [
agenix.nixosModules.default
catppuccin.nixosModules.catppuccin
chaotic.nixosModules.default
impermanence.nixosModules.impermanence
];
devShells.${system}.default = with pkgs;
mkShellNoCC {

1007
flake.lock

File diff suppressed because it is too large Load diff

View file

@ -10,13 +10,23 @@
inputs.nixpkgs.follows = "nixpkgs";
url = "github:nix-community/home-manager";
};
hyprland = {
submodules = true;
type = "git";
url = "https://github.com/hyprwm/Hyprland";
};
hyprland-plugins = {
inputs.hyprland.follows = "hyprland";
url = "github:hyprwm/hyprland-plugins";
};
impermanence.url = "github:nix-community/impermanence";
nix-colors.url = "github:Misterio77/nix-colors";
nix-index-database = {
inputs.nixpkgs.follows = "nixpkgs";
url = "github:nix-community/nix-index-database";
};
nix-super.url = "git+https://git.privatevoid.net/max/nix-super.git";
nixpkgs.url = "github:arianvp/nixpkgs/soft-reboot";
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
nixvim.url = "github:pupbrained/nixvim";
schizofox.url = "github:schizofox/schizofox";
snowfall-flake = {
@ -29,7 +39,6 @@
};
sops-nix.url = "github:Mic92/sops-nix";
treefmt-nix.url = "github:numtide/treefmt-nix";
xmonad-contrib.url = "github:xmonad/xmonad-contrib";
};
outputs = inputs: inputs.flakegen ./flake.in.nix inputs;
}

View file

@ -4,50 +4,35 @@
inputs,
...
}: {
colorScheme = inputs.nix-colors.colorSchemes.catppuccin-mocha;
home = {
packages = with pkgs;
[
duf
eternal-terminal
firefox
grc
iamb
jamesdsp
jetbrains-toolbox
kdePackages.neochat
killall
libnotify
lm_sensors
loupe
mpv
playerctl
prismlauncher
quickemu
quickgui
telegram-desktop
xdotool
vesktop
youki
(xwinwrap.overrideAttrs {
src = fetchFromGitHub {
owner = "camonater62";
repo = "xwinwrap";
rev = "ec74e730072225ffa740bf5076a1dd0a343bb113";
sha256 = "0vfwbcx5y1aphiaix2zps1bl7lhbhdvm6vhys2m0kwvl6igy0cc8";
};
buildPhase = ''
make all
'';
installPhase = ''
mkdir -p $out/bin
mv xwinwrap $out/bin
'';
})
(vesktop.overrideAttrs {withSystemVencord = false;})
jetbrains.clion
]
++ (with inputs; [
nixvim.packages.${pkgs.system}.default
])
++ (with inputs.chaotic.packages.${pkgs.system}; [
distrobox_git
firefox_nightly
]);
pointerCursor = {
@ -72,7 +57,7 @@
catppuccin = {
enable = true;
flavour = "mocha";
flavor = "mocha";
accent = "green";
};
@ -84,7 +69,7 @@
icon.enable = true;
cursor.enable = true;
size = "standard";
tweaks = ["normal"];
tweaks = ["rimless"];
};
};
@ -92,7 +77,15 @@
nix-index-database.comma.enable = true;
nix-index.enable = true;
ripgrep.enable = true;
xmobar.enable = true;
fzf = {
enable = true;
catppuccin.enable = true;
colors = with lib; {
bg = mkForce "-1";
"bg+" = mkForce "-1";
};
};
eza = {
enable = true;
@ -109,79 +102,9 @@
enable = true;
nix-direnv.enable = true;
};
rofi = {
enable = true;
catppuccin.enable = true;
extraConfig = {
modi = "run,drun,window";
icon-theme = "Oranchelo";
show-icons = true;
terminal = "wezterm";
drun-display-format = "{icon} {name}";
location = 0;
disable-history = false;
hide-scrollbar = true;
display-drun = " Apps ";
display-run = " Run ";
display-window = " 󰍲 Window";
display-Network = " 󰤨 Network";
sidebar-mode = true;
};
theme = {
"*".font = "Maple Mono NF 14";
};
};
};
services = {
picom = {
enable = true;
backend = "glx";
fadeDelta = 5;
fade = true;
shadow = true;
vSync = true;
shadowExclude = [
"class_g = 'firefox' && argb"
"class_g *?= 'slop'"
];
settings = {
corner-radius = 10;
blur-background-exclude = [
"class_g = 'slop'"
];
rounded-corners-exclude = [
"window_type = 'dock'"
"window_type = 'desktop'"
];
blur = {
method = "gaussian";
size = 10;
deviation = 5.0;
};
};
};
dunst = {
enable = true;
settings.global = {
corner_radius = 10;
offset = "18x53";
frame_width = 2;
font = "SN Pro 12";
frame_color = lib.mkForce "#a6e3a1";
};
catppuccin.enable = true;
};
};
systemd.user.startServices = "sd-switch";
nix.package = lib.mkForce pkgs.nixSuper;
}

View file

@ -0,0 +1,464 @@
{
pkgs,
config,
lib,
...
}: let
palette = config.colorScheme.palette;
betterTransition = "all 0.3s cubic-bezier(.55,-0.68,.48,1.682)";
in
with pkgs; {
home.packages = [
wl-clipboard-rs
];
programs = {
rofi = {
enable = true;
catppuccin.enable = true;
package = pkgs.rofi-wayland;
extraConfig = {
modi = "run,drun,window";
icon-theme = "Oranchelo";
show-icons = true;
terminal = "wezterm";
drun-display-format = "{icon} {name}";
location = 0;
disable-history = false;
hide-scrollbar = true;
display-drun = " Apps ";
display-run = " Run ";
display-window = " 󰍲 Window";
display-Network = " 󰤨 Network";
sidebar-mode = true;
};
theme = {
"*".font = "Maple Mono NF 14";
window.border-radius = 10;
};
};
waybar = {
enable = true;
package = pkgs.waybar;
settings = [
{
layer = "top";
position = "top";
modules-center = ["hyprland/workspaces"];
modules-left = [
"custom/startmenu"
"hyprland/window"
"pulseaudio"
"cpu"
"memory"
];
modules-right = [
"network"
"custom/notification"
"tray"
"clock"
];
"hyprland/workspaces" = {
format = "{name}";
format-icons = {
default = " ";
active = " ";
urgent = " ";
};
on-scroll-up = "hyprctl dispatch workspace e+1";
on-scroll-down = "hyprctl dispatch workspace e-1";
};
"clock" = {
format = " {:L%I:%M %p}";
tooltip = true;
tooltip-format = "<big>{:%A, %d.%B %Y }</big>\n<tt><small>{calendar}</small></tt>";
};
"hyprland/window" = {
max-length = 22;
separate-outputs = false;
rewrite = {
"" = "Desktop";
};
};
"memory" = {
interval = 5;
format = " {}%";
tooltip = true;
};
"cpu" = {
interval = 5;
format = " {usage:2}%";
tooltip = true;
};
"disk" = {
format = " {free}";
tooltip = true;
};
"network" = {
format-icons = [
"󰤯"
"󰤟"
"󰤢"
"󰤥"
"󰤨"
];
format-ethernet = " {bandwidthDownOctets}";
format-wifi = "{icon} {essid}";
format-disconnected = "󰤮";
tooltip = false;
};
"tray" = {
spacing = 12;
};
"pulseaudio" = {
format = "{icon} {volume}% {format_source}";
format-bluetooth = "{volume}% {icon} {format_source}";
format-bluetooth-muted = "󰅶 {icon} {format_source}";
format-muted = "󰅶 {format_source}";
format-source = " {volume}%";
format-source-muted = "";
format-icons = {
headphone = "";
hands-free = "";
headset = "󰋎";
phone = "";
portable = "";
car = "";
default = [
""
""
""
];
};
on-click = "sleep 0.1 && pavucontrol";
};
"custom/startmenu" = {
tooltip = false;
format = "";
on-click = "rofi -show drun";
};
"custom/notification" = {
tooltip = false;
format = "{icon} {}";
format-icons = {
notification = "<span foreground='red'><sup></sup></span>";
none = "";
dnd-notification = "<span foreground='red'><sup></sup></span>";
dnd-none = "";
inhibited-notification = "<span foreground='red'><sup></sup></span>";
inhibited-none = "";
dnd-inhibited-notification = "<span foreground='red'><sup></sup></span>";
dnd-inhibited-none = "";
};
return-type = "json";
exec = "swaync-client -swb";
on-click = "swaync-client -t &";
escape = true;
};
}
];
style = lib.concatStrings [
''
* {
border: none;
border-radius: 0px;
font-family: Maple Mono NF;
font-size: 16px;
min-height: 0px;
}
window#waybar {
background-color: #${palette.base00};
}
#workspaces {
background: #${palette.base01};
border-radius: 16px;
color: #${palette.base00};
margin: 4px 4px;
padding: 8px 5px;
}
#workspaces button {
animation: gradient_horizontal 15s ease infinite;
background: linear-gradient(45deg, #${palette.base0E}, #${palette.base0F}, #${palette.base0D}, #${palette.base09});
background-size: 300% 300%;
border-radius: 16px;
color: #${palette.base00};
font-weight: bold;
margin: 0px 3px;
opacity: 0.5;
padding: 0px 5px;
transition: ${betterTransition};
}
#workspaces button.active {
animation: gradient_horizontal 15s ease infinite;
background: linear-gradient(45deg, #${palette.base0E}, #${palette.base0F}, #${palette.base0D}, #${palette.base09});
background-size: 300% 300%;
border-radius: 16px;
color: #${palette.base00};
font-weight: bold;
margin: 0px 3px;
min-width: 40px;
opacity: 1.0;
padding: 0px 5px;
transition: ${betterTransition};
}
#workspaces button:hover {
animation: gradient_horizontal 15s ease infinite;
background: linear-gradient(45deg, #${palette.base0E}, #${palette.base0F}, #${palette.base0D}, #${palette.base09});
background-size: 300% 300%;
border-radius: 16px;
color: #${palette.base00};
font-weight: bold;
opacity: 0.8;
transition: ${betterTransition};
}
@keyframes gradient_horizontal {
0% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
100% { background-position: 0% 50%; }
}
@keyframes swiping {
0% { background-position: 0% 200%; }
100% { background-position: 200% 200%; }
}
tooltip {
background: #${palette.base00};
border: 1px solid #${palette.base0E};
border-radius: 12px;
}
tooltip label {
color: #${palette.base07};
}
#window, #pulseaudio, #cpu, #memory, #idle_inhibitor {
background: #${palette.base01};
border-radius: 24px 10px 24px 10px;
color: #${palette.base05};
font-weight: bold;
margin: 4px 0px;
margin-left: 7px;
padding: 0px 18px;
}
#custom-startmenu {
background: #${palette.base01};
border-radius: 0px 0px 40px 0px;
color: #${palette.base0D};
font-size: 28px;
margin: 0px;
padding: 0px 30px 0px 15px;
}
#network, #custom-notification, #tray {
background: #${palette.base01};
border-radius: 10px 24px 10px 24px;
color: #${palette.base05};
font-weight: bold;
margin: 4px 0px;
margin-right: 7px;
padding: 0px 18px;
}
#clock {
animation: gradient_horizontal 15s ease infinite;
background: linear-gradient(45deg, #${palette.base0C}, #${palette.base0F}, #${palette.base0B}, #${palette.base08});
background-size: 300% 300%;
border-radius: 0px 0px 0px 40px;
color: #${palette.base00};
font-weight: bold;
margin: 0px;
padding: 0px 15px 0px 30px;
}
''
];
};
};
services = {
udiskie.enable = true;
swaync = {
enable = true;
style = builtins.fetchurl {
url = "https://github.com/catppuccin/swaync/releases/download/v0.2.3/mocha.css";
sha256 = "1xr1wkg4zb467b35xhsfqiwhimfnn88i3ml5rf173rkm7fyby9qy";
};
};
};
wayland.windowManager.hyprland = {
enable = true;
systemd.variables = ["--all"];
settings = let
mod = "SUPER";
modC = "SUPER CTRL";
modS = "SUPER SHIFT";
browser = "firefox-nightly";
colorPicker = "notify-send -i gtk-color-picker $(${hyprpicker}/bin/hyprpicker -a) 'Copied to clipboard.'";
fileManager = "nautilus";
launcher = "rofi -show drun";
terminal = "wezterm";
screenshot = mode: "${
hyprshot.overrideAttrs {
# Fixes cursors showing in region shots
src = pkgs.fetchFromGitHub {
owner = "BenCarmichael01";
repo = "Hyprshot";
rev = "84e2adcd5dd9060178d0d028ad032734797fba23";
hash = "sha256-XDKwBiUMWvxoWpkdJ0EK4kEqPSTZLcF6axHjom3c5Jk=";
};
}
}/bin/hyprshot --clipboard-only -m ${mode}";
in {
decoration.rounding = 10;
dwindle.preserve_split = true;
gestures.workspace_swipe = true;
input.touchpad.natural_scroll = true;
layerrule = [
"dimaround, rofi"
];
animations = {
enabled = true;
bezier = [
"overshot,0.7,0.6,0.1,1.1"
"bounce,1,1.6,0.1,0.85"
];
animation = [
"windows,1,5,bounce,popin"
"border,1,20,default"
"fade,1,5,default"
"workspaces,1,5,overshot,slide"
];
};
general = {
border_size = 2;
gaps_in = 10;
resize_on_border = true;
"col.active_border" = "rgba(33ccffee) rgba(00ff99ee) 45deg";
"col.inactive_border" = "rgba(595959aa)";
};
exec-once = [
"waybar"
"${mpvpaper}/bin/mpvpaper -vp -o 'no-audio loop' DP-1 ${builtins.toString ./wall.mp4}"
"mullvad connect"
];
misc = {
force_default_wallpaper = 0;
disable_hyprland_logo = true;
};
monitor = [
"eDP-1, disable"
"DP-1, 2560x1440@165, auto, auto"
];
env = [
# Nvidia stuff
"GBM_BACKEND, nvidia-drm"
"__GLX_VENDOR_LIBRARY_NAME, nvidia"
"LIBVA_DRIVER_NAME, nvidia"
"WLR_DRM_DEVICES, $HOME/.config/hypr/card"
# Cursors
"HYPRCURSOR_SIZE, 24"
"XCURSOR_SIZE, 24"
];
bindm = [
"${mod}, mouse:272, movewindow"
"${mod}, mouse:273, resizewindow"
];
bind =
[
# Apps
"${mod}, c, exec, ${colorPicker}"
"${mod}, w, exec, ${browser}"
"${mod}, e, exec, ${fileManager}"
"${mod}, r, exec, ${launcher}"
"${mod}, Return, exec, ${terminal}"
# Screenshots
"${modS}, s, exec, ${screenshot "window"}"
"${modC}, 3, exec, ${screenshot "output -c"}"
"${modC}, 4, exec, ${screenshot "region -C 0,0"}"
# Mouse controls
"${mod}, mouse_down, workspace, e-1"
"${mod}, mouse_up, workspace, e+1"
# Quitting
"${mod}, q, killactive"
"${modS}, q, exit"
# Toggles
"${mod}, j, togglesplit"
"${mod}, Space, togglefloating"
# Focus movements
"${mod}, h, movefocus, l"
"${mod}, j, movefocus, d"
"${mod}, k, movefocus, u"
"${mod}, l, movefocus, r"
# Window movements
"${modS}, h, movewindow, l"
"${modS}, j, movewindow, d"
"${modS}, k, movewindow, u"
"${modS}, l, movewindow, r"
]
++ (
builtins.concatLists (builtins.genList (
x: let
ws = let
c = (x + 1) / 10;
in
builtins.toString (x + 1 - (c * 10));
in [
# Workspaces
"${mod}, ${ws}, workspace, ${builtins.toString (x + 1)}"
"${modS}, ${ws}, movetoworkspace, ${builtins.toString (x + 1)}"
]
)
10)
);
};
};
}

Binary file not shown.

View file

@ -17,7 +17,12 @@ with pkgs; {
}
window() {
${maim}/bin/maim -u -f png -i "$(${xdotool}/bin/xdotool getactivewindow)" | ${pkgs.xclip}/bin/xclip -selection clipboard -t image/png
window_geometry=$(${xdotool}/bin/xdotool getwindowgeometry $(${xdotool}/bin/xdotool getactivewindow) | tail -n +2 | awk '{print $2}' | tac)
last_line=$(echo "$window_geometry" | tail -n 1)
modified_last_line=$(echo "$last_line" | awk 'BEGIN {FS=OFS=","} {for(i=1; i<=NF; i++) $i+=2; print}' | sed -E "s/([+-]?[0-9]+),([+-]?[0-9]+)/+\1+\2/g; s/\+\-/\-/g")
final_string=$(echo "$window_geometry" | sed '$s/.*/'"$modified_last_line"'/' | paste -sd "")
${maim}/bin/maim -u -f png -g "$final_string" | ${pkgs.xclip}/bin/xclip -selection clipboard -t image/png
notify_user
}

View file

@ -58,26 +58,8 @@ with pkgs; {
hash = "sha256-oPPCtFN2DPuM//c48SXb4TrFRjJtccg0YPXcAo0Lxq0=";
};
}
{
name = "autopair";
src = fetchFromGitHub {
owner = "jorgebucaran";
repo = "autopair.fish";
rev = "4d1752ff5b39819ab58d7337c69220342e9de0e2";
hash = "sha256-qt3t1iKRRNuiLWiVoiAYOu+9E7jsyECyIqZJ/oRIT1A=";
};
}
{
name = "done";
src = fetchFromGitHub {
owner = "franciscolourenco";
repo = "done";
rev = "d47f4d6551cccb0e46edfb14213ca0097ee22f9a";
hash = "sha256-VSCYsGjNPSFIZSdLrkc7TU7qyPVm8UupOoav5UqXPMk=";
};
}
]
++ (mkFishPlugins ["grc" "plugin-git"]);
++ (mkFishPlugins ["autopair" "bass" "colored-man-pages" "done" "fifc" "git-abbr" "forgit" "grc"]);
shellAliases = {
cat = "${bat}/bin/bat";

View file

@ -7,12 +7,12 @@ with pkgs; {
userName = "pupbrained";
userEmail = "mars@pupbrained.xyz";
aliases.pushall = "!git remote | xargs -L1 git push";
difftastic.enable = true;
delta.enable = true;
extraConfig = {
init.defaultBranch = "main";
push.autoSetupRemote = true;
credential.helper = "store --file /etc/git-credentials";
credential.helper = "libsecret";
};
signing = {

View file

@ -94,13 +94,13 @@
default_cursor_style = 'BlinkingBar',
enable_kitty_graphics = true,
enable_scroll_bar = false,
enable_wayland = false,
font_size = 12,
font = wezterm.font('Maple Mono NF'),
keys = keybinds,
front_end = 'WebGpu',
front_end = 'OpenGL',
underline_position = -4,
use_fancy_tab_bar = false,
webgpu_power_preference = 'HighPerformance',
window_background_opacity = 0.8,
window_padding = { left = 0, right = 0, top = 0, bottom = 0 },
}

View file

@ -0,0 +1,110 @@
{pkgs, ...}:
with pkgs; {
boot.binfmt.registrations.appimage = {
wrapInterpreterInShell = false;
interpreter = "${appimage-run}/bin/appimage-run";
recognitionType = "magic";
offset = 0;
mask = ''\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff'';
magicOrExtension = ''\x7fELF....AI\x02'';
};
systemd.user.services.appimage-menu-updater = let
appimage-menu-update = writeShellScript "appimage-menu-updater.sh" ''
shopt -s nullglob
remove_old_files () {
for path in "$HOME"/.local/share/applications/appimage-menu-updater*; do
rm "$path"
done
for path in "$HOME"/.local/share/icons/hicolor/appimage-menu-updater*; do
rm "$path"
done
}
update_each () {
path="$1"
file="$2"
echo "found $file"
desktop_source=$(${p7zip.outPath}/bin/7z l -ba -slt "$path" | grep '\.desktop$' | head -n1 | sed --expression 's/Path = //')
desktop_target="$HOME/.local/share/applications/appimage-menu-updater-$file.desktop"
${p7zip.outPath}/bin/7z e "$path" "$desktop_source" -y -so > "$desktop_target"
sed -i "s@Exec=.*@Exec=${appimage-run.outPath}/bin/appimage-run $path@" "$desktop_target"
update_icon "$path" "$desktop_target"
}
update_icon () {
path="$1"
desktop_target="$2"
echo "updating icon"
icon_link_proto_source=$(grep Icon= "$desktop_target" | head -n1 | sed 's/Icon=//')
icon_link_source=$(${p7zip.outPath}/bin/7z l -ba -slt "$path" | grep -e "Path = $icon_link_proto_source.\(png\|svg\)" | head -n1 | sed 's/Path = //')
if [[ "$icon_link_source" ]]; then
tempdir=$(mktemp -d)
${p7zip.outPath}/bin/7z x "$path" "$icon_link_source" -o"$tempdir" >/dev/null
icon_temp_maybe_link=$(find "$tempdir"/* | head -n1)
if [[ -L "$icon_temp_maybe_link" ]]; then
icon_source=$(readlink "$icon_temp_maybe_link")
if [[ "$icon_source" ]]; then
${p7zip.outPath}/bin/7z x "$path" "$icon_source" -y -o"$tempdir"
if [[ -f "$tempdir/$icon_source" ]]; then
icon_temp_source=$tempdir/$icon_source
else
echo 'icon link target does not exists'
fi
else
echo 'icon link is invalid'
fi
else
icon_temp_source=$icon_temp_maybe_link
fi
if [[ "$icon_temp_source" ]]; then
icon_target="$HOME/.local/share/icons/hicolor/appimage-menu-updater-"$(basename "$icon_temp_source")
mv "$icon_temp_source" "$icon_target"
sed -i "s@Icon=.*@Icon=$icon_target@" "$desktop_target"
fi
rm -Rf "$tempdir"
else
echo 'icon file not found'
fi
}
update () {
echo 'updating...'
remove_old_files
for path in "$HOME"/Applications/*.AppImage; do
update_each "$path" $(basename "$path")
done
}
mkdir -p "$HOME/Applications"
update
while ${inotify-tools.outPath}/bin/inotifywait -e modify,delete,moved_to,moved_from "$HOME"/Applications; do
update
done
'';
in {
enable = true;
description = "AppImage Menu Updater";
unitConfig = {
Type = "simple";
};
serviceConfig = {
ExecStart = "/bin/sh -c 'HOME=%h ${appimage-menu-update}'";
};
wantedBy = ["default.target"];
};
}

View file

@ -6,27 +6,33 @@
...
}:
with lib // pkgs // inputs; {
imports = [./hardware.nix];
security.sudo.extraConfig = ''
Defaults lecture = never, pwfeedback
'';
security.pam.loginLimits = [
{
domain = "*";
item = "nofile";
type = "-";
value = "32768";
}
{
domain = "*";
item = "memlock";
type = "-";
value = "32768";
}
imports = [
./hardware.nix
];
security = {
rtkit.enable = true;
pam.loginLimits = [
{
domain = "*";
item = "nofile";
type = "-";
value = "32768";
}
{
domain = "*";
item = "memlock";
type = "-";
value = "32768";
}
];
sudo.extraConfig = ''
Defaults lecture = never, pwfeedback
'';
};
console.catppuccin.enable = true;
systemd.user.extraConfig = let
@ -42,9 +48,7 @@ with lib // pkgs // inputs; {
age = {
secrets.passwd.file = /etc/secrets/passwd.age;
identityPaths = [
"/persist/root/.ssh/id_ed25519"
];
identityPaths = ["/persist/root/.ssh/id_ed25519"];
};
chaotic = {
@ -81,7 +85,9 @@ with lib // pkgs // inputs; {
environment = {
sessionVariables = {
BROWSER = "firefox-nightly";
EDITOR = "nvim";
TERMINAL = "wezterm";
DIRENV_WARN_TIMEOUT = "100s";
};
@ -91,6 +97,8 @@ with lib // pkgs // inputs; {
internal.lightly-boehs-qt6
snowfallorg.flake
sound-theme-freedesktop
winetricks
wineWowPackages.staging
xclip
yt-dlp
];
@ -101,15 +109,13 @@ with lib // pkgs // inputs; {
"/etc/NetworkManager"
"/etc/secrets"
"/etc/ssh"
"/etc/mullvad-vpn"
"/root/.ssh"
"/var/lib/bluetooth"
"/var/lib/nixos"
"/var/lib/systemd/coredump"
];
files = [
"/etc/machine-id"
"/etc/git-credentials"
];
files = ["/etc/machine-id"];
};
};
@ -118,18 +124,9 @@ with lib // pkgs // inputs; {
kernelPackages = linuxPackages_cachyos;
supportedFilesystems = ["btrfs" "ntfs"];
binfmt.registrations.appimage = {
wrapInterpreterInShell = false;
interpreter = "${appimage-run}/bin/appimage-run";
recognitionType = "magic";
offset = 0;
mask = ''\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff'';
magicOrExtension = ''\x7fELF....AI\x02'';
};
initrd.systemd = {
enable = true;
emergencyAccess = true; # No password needed bc of LUKS
emergencyAccess = true; # No password needed because of LUKS
};
plymouth = {
@ -208,6 +205,8 @@ with lib // pkgs // inputs; {
min-free = "${toString (5 * 1024 * 1024 * 1024)}";
max-free = "${toString (10 * 1024 * 1024 * 1024)}";
extra-sandbox-paths = [config.programs.ccache.cacheDir];
extra-experimental-features = [
"flakes" # flakes
"nix-command" # experimental nix commands
@ -219,40 +218,39 @@ with lib // pkgs // inputs; {
substituters = [
"https://cache.nixos.org"
"https://cache.privatevoid.net"
"https://cuda-maintainers.cachix.org"
"https://hyprland.cachix.org"
"https://nix-community.cachix.org"
"https://nyx.chaotic.cx/"
"https://cuda-maintainers.cachix.org"
"https://cache.privatevoid.net"
];
trusted-substituters = [
"cache.nixos.org"
"nix-community.cachix.org"
"nyx.chaotic.cx"
"cuda-maintainers.cachix.org"
"cache.privatevoid.net"
];
trusted-public-keys = [
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
"nyx.chaotic.cx-1:HfnXSw4pj95iI/n17rIDy40agHj12WfF+Gqk6SonIT8="
"cache.privatevoid.net:SErQ8bvNWANeAvtsOESUwVYr2VJynfuc9JRwlzTTkVg="
"chaotic-nyx.cachix.org-1:HfnXSw4pj95iI/n17rIDy40agHj12WfF+Gqk6SonIT8="
"cuda-maintainers.cachix.org-1:0dq3bujKpuEPMCX6U4WylrUDZ9JyUG0VpVZa7CNfq5E="
"cache.privatevoid.net:SErQ8bvNWANeAvtsOESUwVYr2VJynfuc9JRwlzTTkVg="
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
"nyx.chaotic.cx-1:HfnXSw4pj95iI/n17rIDy40agHj12WfF+Gqk6SonIT8="
];
};
};
programs = {
ccache.enable = true;
dconf.enable = true;
fish.enable = true;
gamemode.enable = true;
nix-ld.enable = true;
steam.enable = true;
gnupg.agent.enable = true;
virt-manager.enable = true;
hyprland = {
enable = true;
package = inputs.hyprland.packages.${pkgs.system}.hyprland;
};
nh = {
enable = true;
clean.enable = true;
@ -262,6 +260,7 @@ with lib // pkgs // inputs; {
};
networking = {
useDHCP = mkDefault true;
hostName = "navis";
firewall.enable = false;
nameservers = ["1.1.1.1" "1.0.0.1"];
@ -271,20 +270,27 @@ with lib // pkgs // inputs; {
time.timeZone = "America/New_York";
i18n.defaultLocale = "en_US.UTF-8";
services = {
btrfs.autoScrub.enable = true;
flatpak.enable = true;
getty.autologinUser = "marshall";
gnome.gnome-keyring.enable = true;
mullvad-vpn.enable = true;
ollama.enable = true;
openssh.enable = true;
spice-vdagentd.enable = true;
udisks2.enable = true;
displayManager.autoLogin = {
greetd = {
enable = true;
user = "marshall";
settings = rec {
initial_session = {
command = "${pkgs.hyprland}/bin/Hyprland";
user = "marshall";
};
default_session = initial_session;
};
};
libinput = {
@ -295,34 +301,12 @@ with lib // pkgs // inputs; {
xserver = {
enable = true;
videoDrivers = ["nvidia"];
xkb.layout = "us";
displayManager.startx = {
enable = true;
};
xrandrHeads = [
{
output = "DP-0";
monitorConfig = ''
Option "PreferredMode" "2560x1440_165.08"
'';
}
];
windowManager.xmonad = {
enable = true;
enableContribAndExtras = true;
enableConfiguredRecompile = true;
flake = {
enable = true;
compiler = "ghc982";
};
};
};
pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
};
};
@ -340,6 +324,7 @@ with lib // pkgs // inputs; {
hardware = {
bluetooth.enable = true;
i2c.enable = true;
opengl = {
enable = true;
@ -354,7 +339,7 @@ with lib // pkgs // inputs; {
nvidia-container-toolkit.enable = true;
nvidia = {
package = config.boot.kernelPackages.nvidiaPackages.latest;
package = config.boot.kernelPackages.nvidiaPackages.beta;
modesetting.enable = true;
powerManagement.enable = true;
@ -367,17 +352,5 @@ with lib // pkgs // inputs; {
};
};
xdg.portal = {
enable = true;
config.common.default = "*";
xdgOpenUsePortal = true;
extraPortals = [
kdePackages.xdg-desktop-portal-kde
xdg-desktop-portal-gtk
xdg-desktop-portal-shana
];
};
system.stateVersion = "24.05";
}

View file

@ -15,6 +15,7 @@
boot.initrd.kernelModules = [];
boot.kernelModules = ["kvm-intel"];
boot.extraModulePackages = [];
boot.tmp.useTmpfs = true;
fileSystems."/" = {
device = "/dev/disk/by-uuid/d375c3a3-63a3-47f8-8b77-58fabbb8f67b";