feat: move to dms and remove hyprland completely

This commit is contained in:
Nickolaj Jepsen 2025-12-12 03:38:32 +01:00
parent bc9a10e521
commit 357d01cc9b
24 changed files with 410 additions and 767 deletions

333
flake.lock generated
View file

@ -47,47 +47,27 @@
"type": "github"
}
},
"ags": {
"dankMaterialShell": {
"inputs": {
"astal": "astal",
"dgop": [
"dgop"
],
"nixpkgs": [
"fireproof-shell",
"nixpkgs"
]
],
"quickshell": "quickshell"
},
"locked": {
"lastModified": 1764289441,
"narHash": "sha256-ak+lgFiYE5PHByN1/BRkO5JP498hno6Ix24C1Qf/vec=",
"owner": "aylur",
"repo": "ags",
"rev": "e169694390548dfd38ff40f1ef2163d6c3ffe3ea",
"lastModified": 1765493842,
"narHash": "sha256-KwubAPYQBVsQApkiKLfNp0K4HVkW02pu3GhaDU/78ZI=",
"owner": "AvengeMedia",
"repo": "DankMaterialShell",
"rev": "89dcd72d703d525d2034f616ecf19823d5f50457",
"type": "github"
},
"original": {
"owner": "aylur",
"repo": "ags",
"type": "github"
}
},
"astal": {
"inputs": {
"nixpkgs": [
"fireproof-shell",
"ags",
"nixpkgs"
]
},
"locked": {
"lastModified": 1764173295,
"narHash": "sha256-Jh4VtPcK2Ov+RTcV9FtyQRsxiJmXFQGfqX6jjM7/mgc=",
"owner": "aylur",
"repo": "astal",
"rev": "7d1fac8a4b2a14954843a978d2ddde86168c75ef",
"type": "github"
},
"original": {
"owner": "aylur",
"repo": "astal",
"owner": "AvengeMedia",
"repo": "DankMaterialShell",
"type": "github"
}
},
@ -134,6 +114,26 @@
"type": "github"
}
},
"dgop": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1762835999,
"narHash": "sha256-UykYGrGFOFTmDpKTLNxj1wvd1gbDG4TkqLNSbV0TYwk=",
"owner": "AvengeMedia",
"repo": "dgop",
"rev": "799301991cd5dcea9b64245f9d500dcc76615653",
"type": "github"
},
"original": {
"owner": "AvengeMedia",
"repo": "dgop",
"type": "github"
}
},
"disko": {
"inputs": {
"nixpkgs": [
@ -141,11 +141,11 @@
]
},
"locked": {
"lastModified": 1764627417,
"narHash": "sha256-D6xc3Rl8Ab6wucJWdvjNsGYGSxNjQHzRc2EZ6eeQ6l4=",
"lastModified": 1765326679,
"narHash": "sha256-fTLX9kDwLr9Y0rH/nG+h1XG5UU+jBcy0PFYn5eneRX8=",
"owner": "nix-community",
"repo": "disko",
"rev": "5a88a6eceb8fd732b983e72b732f6f4b8269bef3",
"rev": "d64e5cdca35b5fad7c504f615357a7afe6d9c49e",
"type": "github"
},
"original": {
@ -154,29 +154,6 @@
"type": "github"
}
},
"fireproof-shell": {
"inputs": {
"ags": "ags",
"flake-parts": "flake-parts_2",
"nixpkgs": [
"nixpkgs"
],
"treefmt-nix": "treefmt-nix_2"
},
"locked": {
"lastModified": 1764592126,
"narHash": "sha256-NsZy4hn9s9mJyf36PtNe+DE7nVXTJKOWbIb4O38CuVs=",
"owner": "nickolaj-jepsen",
"repo": "fireproof-shell",
"rev": "9e001284046736178c3ce77df56f3dbcedc81578",
"type": "github"
},
"original": {
"owner": "nickolaj-jepsen",
"repo": "fireproof-shell",
"type": "github"
}
},
"flake-compat": {
"flake": false,
"locked": {
@ -216,14 +193,16 @@
},
"flake-parts_2": {
"inputs": {
"nixpkgs-lib": "nixpkgs-lib"
"nixpkgs-lib": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1763759067,
"narHash": "sha256-LlLt2Jo/gMNYAwOgdRQBrsRoOz7BPRkzvNaI/fzXi2Q=",
"lastModified": 1765495779,
"narHash": "sha256-MhA7wmo/7uogLxiewwRRmIax70g6q1U/YemqTGoFHlM=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "2cccadc7357c0ba201788ae99c4dfa90728ef5e0",
"rev": "5635c32d666a59ec9a55cab87e898889869f7b71",
"type": "github"
},
"original": {
@ -233,26 +212,6 @@
}
},
"flake-parts_3": {
"inputs": {
"nixpkgs-lib": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1763759067,
"narHash": "sha256-LlLt2Jo/gMNYAwOgdRQBrsRoOz7BPRkzvNaI/fzXi2Q=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "2cccadc7357c0ba201788ae99c4dfa90728ef5e0",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-parts_4": {
"inputs": {
"nixpkgs-lib": [
"nur",
@ -323,11 +282,11 @@
]
},
"locked": {
"lastModified": 1765170903,
"narHash": "sha256-O8VTGey1xxiRW+Fpb+Ps9zU7ShmxUA1a7cMTcENCVNg=",
"lastModified": 1765384171,
"narHash": "sha256-FuFtkJrW1Z7u+3lhzPRau69E0CNjADku1mLQQflUORo=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "20561be440a11ec57a89715480717baf19fe6343",
"rev": "44777152652bc9eacf8876976fa72cc77ca8b9d8",
"type": "github"
},
"original": {
@ -349,11 +308,11 @@
"xwayland-satellite-unstable": "xwayland-satellite-unstable"
},
"locked": {
"lastModified": 1765120349,
"narHash": "sha256-MvwrHRV80hOdEwfLgI16XhApHuvj69aAgUWQ8ZBgAqE=",
"lastModified": 1765386897,
"narHash": "sha256-wmHtBM2Iuthw9DsTD9RUkkZqrmsSJYGgflSaskE+Rrc=",
"owner": "sodiboo",
"repo": "niri-flake",
"rev": "0f4acff79842637e92f5f2609d3844bac9d5e592",
"rev": "be7806f4fe2ead48eaf22e125f535d70a5ff2e3b",
"type": "github"
},
"original": {
@ -382,11 +341,11 @@
"niri-unstable": {
"flake": false,
"locked": {
"lastModified": 1764966114,
"narHash": "sha256-nC0Fsu4zSdabdR4tHHMCrTgqLms612eEDy5VCdQVZFk=",
"lastModified": 1765306956,
"narHash": "sha256-dAnL/EFft88xvKBLSE4pxSD5D945Cjm3E59bSl0feSE=",
"owner": "YaLTeR",
"repo": "niri",
"rev": "ba29735fbbd8cf8319c71ccb55b54a0580007c80",
"rev": "4d058e611147803f5188e417943c6653d846542f",
"type": "github"
},
"original": {
@ -402,11 +361,11 @@
]
},
"locked": {
"lastModified": 1765080594,
"narHash": "sha256-5t3d655GqLblE+p5xN5ntkeRfZBesN7vehOWcRcU88M=",
"lastModified": 1765267181,
"narHash": "sha256-d3NBA9zEtBu2JFMnTBqWj7Tmi7R5OikoU2ycrdhQEws=",
"owner": "nix-community",
"repo": "nix-index-database",
"rev": "4194c582d0a3f440382ee00b729ea5cc5ef59754",
"rev": "82befcf7dc77c909b0f2a09f5da910ec95c5b78f",
"type": "github"
},
"original": {
@ -417,14 +376,14 @@
},
"nix-vscode-extensions": {
"inputs": {
"nixpkgs": "nixpkgs_2"
"nixpkgs": "nixpkgs"
},
"locked": {
"lastModified": 1765159287,
"narHash": "sha256-C+dVEekU31QPaPShMaUbs3LqOVVqzq0b4gKC1jX8Mlk=",
"lastModified": 1765505053,
"narHash": "sha256-nDMsy5cVXs4iShqoLt8gCz/s1LdVxsaUFsTuSY/22rg=",
"owner": "nix-community",
"repo": "nix-vscode-extensions",
"rev": "dccd0cc3693bff67e4856b5a22445223aabc4d4b",
"rev": "1778f178603ed65b4e4033c64f04ea51142ad6f6",
"type": "github"
},
"original": {
@ -450,11 +409,11 @@
},
"nixos-facter-modules": {
"locked": {
"lastModified": 1764252389,
"narHash": "sha256-3bbuneTKZBkYXlm0bE36kUjiDsasoIC1GWBw/UEJ9T4=",
"lastModified": 1765442039,
"narHash": "sha256-k3lYQ+A1F7aTz8HnlU++bd9t/x/NP2A4v9+x6opcVg0=",
"owner": "numtide",
"repo": "nixos-facter-modules",
"rev": "5ea68886d95218646d11d3551a476d458df00778",
"rev": "9dd775ee92de63f14edd021d59416e18ac2c00f1",
"type": "github"
},
"original": {
@ -485,69 +444,6 @@
}
},
"nixpkgs": {
"locked": {
"lastModified": 1761236834,
"narHash": "sha256-+pthv6hrL5VLW2UqPdISGuLiUZ6SnAXdd2DdUE+fV2Q=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "d5faa84122bc0a1fd5d378492efce4e289f8eac1",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-lib": {
"locked": {
"lastModified": 1761765539,
"narHash": "sha256-b0yj6kfvO8ApcSE+QmA6mUfu8IYG6/uU28OFn4PaC8M=",
"owner": "nix-community",
"repo": "nixpkgs.lib",
"rev": "719359f4562934ae99f5443f20aa06c2ffff91fc",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nixpkgs.lib",
"type": "github"
}
},
"nixpkgs-stable": {
"locked": {
"lastModified": 1764983851,
"narHash": "sha256-y7RPKl/jJ/KAP/VKLMghMgXTlvNIJMHKskl8/Uuar7o=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "d9bc5c7dceb30d8d6fafa10aeb6aa8a48c218454",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-25.11",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-unstable": {
"locked": {
"lastModified": 1764950072,
"narHash": "sha256-BmPWzogsG2GsXZtlT+MTcAWeDK5hkbGRZTeZNW42fwA=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "f61125a668a320878494449750330ca58b78c557",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1759770925,
"narHash": "sha256-CZwkCtzTNclqlhuwDsVtGoRumTpqCUK0xSnFIMgd8ls=",
@ -563,13 +459,45 @@
"type": "github"
}
},
"nixpkgs_3": {
"nixpkgs-stable": {
"locked": {
"lastModified": 1764983851,
"narHash": "sha256-y7RPKl/jJ/KAP/VKLMghMgXTlvNIJMHKskl8/Uuar7o=",
"lastModified": 1765311797,
"narHash": "sha256-mSD5Ob7a+T2RNjvPvOA1dkJHGVrNVl8ZOrAwBjKBDQo=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "09eb77e94fa25202af8f3e81ddc7353d9970ac1b",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-25.11",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-unstable": {
"locked": {
"lastModified": 1765186076,
"narHash": "sha256-hM20uyap1a0M9d344I692r+ik4gTMyj60cQWO+hAYP8=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "d9bc5c7dceb30d8d6fafa10aeb6aa8a48c218454",
"rev": "addf7cf5f383a3101ecfba091b98d0a1263dc9b8",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1765311797,
"narHash": "sha256-mSD5Ob7a+T2RNjvPvOA1dkJHGVrNVl8ZOrAwBjKBDQo=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "09eb77e94fa25202af8f3e81ddc7353d9970ac1b",
"type": "github"
},
"original": {
@ -579,7 +507,7 @@
"type": "github"
}
},
"nixpkgs_4": {
"nixpkgs_3": {
"locked": {
"lastModified": 1761236834,
"narHash": "sha256-+pthv6hrL5VLW2UqPdISGuLiUZ6SnAXdd2DdUE+fV2Q=",
@ -597,17 +525,17 @@
},
"nur": {
"inputs": {
"flake-parts": "flake-parts_4",
"flake-parts": "flake-parts_3",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1765189607,
"narHash": "sha256-5zMFG00O+JW/YOpCfPjNnQ8vmjRF3IRwRukfUTVLwnE=",
"lastModified": 1765506555,
"narHash": "sha256-v18RWNPmHOEhvnvcZEtsZ+3xpFaEQqhW8HIUVg4n+fM=",
"owner": "nix-community",
"repo": "NUR",
"rev": "e3983edb556e45a5fa73d20386bd015ff2707199",
"rev": "2f636cb9dfbfc27d6b4a84ff1f360b79103ef980",
"type": "github"
},
"original": {
@ -639,23 +567,46 @@
"type": "github"
}
},
"quickshell": {
"inputs": {
"nixpkgs": [
"dankMaterialShell",
"nixpkgs"
]
},
"locked": {
"lastModified": 1764663772,
"narHash": "sha256-sHqLmm0wAt3PC4vczJeBozI1/f4rv9yp3IjkClHDXDs=",
"ref": "refs/heads/master",
"rev": "26531fc46ef17e9365b03770edd3fb9206fcb460",
"revCount": 713,
"type": "git",
"url": "https://git.outfoxxed.me/quickshell/quickshell"
},
"original": {
"rev": "26531fc46ef17e9365b03770edd3fb9206fcb460",
"type": "git",
"url": "https://git.outfoxxed.me/quickshell/quickshell"
}
},
"root": {
"inputs": {
"agenix": "agenix",
"agenix-rekey": "agenix-rekey",
"dankMaterialShell": "dankMaterialShell",
"dgop": "dgop",
"disko": "disko",
"fireproof-shell": "fireproof-shell",
"flake-parts": "flake-parts_3",
"flake-parts": "flake-parts_2",
"home-manager": "home-manager_2",
"niri": "niri",
"nix-index-database": "nix-index-database",
"nix-vscode-extensions": "nix-vscode-extensions",
"nixos-facter-modules": "nixos-facter-modules",
"nixos-generators": "nixos-generators",
"nixpkgs": "nixpkgs_3",
"nixpkgs": "nixpkgs_2",
"nixpkgs-unstable": "nixpkgs-unstable",
"nur": "nur",
"treefmt-nix": "treefmt-nix_3"
"treefmt-nix": "treefmt-nix_2"
}
},
"systems": {
@ -696,25 +647,7 @@
},
"treefmt-nix_2": {
"inputs": {
"nixpkgs": "nixpkgs"
},
"locked": {
"lastModified": 1762938485,
"narHash": "sha256-AlEObg0syDl+Spi4LsZIBrjw+snSVU4T8MOeuZJUJjM=",
"owner": "numtide",
"repo": "treefmt-nix",
"rev": "5b4ee75aeefd1e2d5a1cc43cf6ba65eba75e83e4",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "treefmt-nix",
"type": "github"
}
},
"treefmt-nix_3": {
"inputs": {
"nixpkgs": "nixpkgs_4"
"nixpkgs": "nixpkgs_3"
},
"locked": {
"lastModified": 1762938485,
@ -750,11 +683,11 @@
"xwayland-satellite-unstable": {
"flake": false,
"locked": {
"lastModified": 1764721075,
"narHash": "sha256-ChH4nq0cMEEkzkHqKlQt5Z7wxrk8ybcEHuA1YKAYmV0=",
"lastModified": 1765343581,
"narHash": "sha256-HtTPbV6z6AJPg2d0bHaJKFrnNha+SEbHvbJafKAQ614=",
"owner": "Supreeeme",
"repo": "xwayland-satellite",
"rev": "1b918e29b419e89910014054e8b71d54c9235ea5",
"rev": "f0ad674b7009a6afd80cea59d4fbf975dd68ee95",
"type": "github"
},
"original": {

View file

@ -35,9 +35,6 @@
disko.url = "github:nix-community/disko";
disko.inputs.nixpkgs.follows = "nixpkgs";
fireproof-shell.url = "github:nickolaj-jepsen/fireproof-shell";
fireproof-shell.inputs.nixpkgs.follows = "nixpkgs";
treefmt-nix.url = "github:numtide/treefmt-nix";
flake-parts.url = "github:hercules-ci/flake-parts";
@ -52,5 +49,12 @@
niri.url = "github:sodiboo/niri-flake";
niri.inputs.nixpkgs.follows = "nixpkgs";
dgop.url = "github:AvengeMedia/dgop";
dgop.inputs.nixpkgs.follows = "nixpkgs";
dankMaterialShell.url = "github:AvengeMedia/DankMaterialShell";
dankMaterialShell.inputs.nixpkgs.follows = "nixpkgs";
dankMaterialShell.inputs.dgop.follows = "dgop";
};
}

View file

@ -38,7 +38,7 @@ with lib; let
inputs.agenix-rekey.nixosModules.default
inputs.nix-index-database.nixosModules.nix-index
inputs.nixos-facter-modules.nixosModules.facter
inputs.fireproof-shell.nixosModules.default
inputs.dankMaterialShell.nixosModules.dankMaterialShell
inputs.niri.nixosModules.niri
../modules/base
../modules/programs

View file

@ -1,6 +0,0 @@
_: {
services.ollama = {
enable = true;
acceleration = "cuda";
};
}

View file

@ -27,12 +27,15 @@
cp *.svg *.png $out/share/backgrounds
'';
};
unknownPng = background + "/share/backgrounds/unknown.png";
geometryPng = background + "/share/backgrounds/geometry.png";
pngs = [
(background + "/share/backgrounds/unknown.png")
(background + "/share/backgrounds/geometry.png")
unknownPng
geometryPng
];
in {
fireproof.home-manager = {
# Use hyprpaper as we can't currently set wallpapers through DMS
services.hyprpaper = {
enable = true;
settings = {
@ -40,5 +43,15 @@ in {
wallpaper = [",${builtins.head pngs}"];
};
};
programs.dankMaterialShell.default.settings = {
# Disables wallpaper management in DMS to avoid conflicts with Hyprpaper
screenPreferences.wallpaper = [];
};
programs.dankMaterialShell.default.session = {
# Attempt to set a default wallpaper on first run
wallpaperPath = unknownPng;
};
};
}

View file

Before

Width:  |  Height:  |  Size: 410 B

After

Width:  |  Height:  |  Size: 410 B

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 282 KiB

After

Width:  |  Height:  |  Size: 282 KiB

Before After
Before After

View file

@ -0,0 +1,91 @@
{config, ...}: let
commonBarSettings = {
enabled = true;
position = 0;
spacing = 0;
innerPadding = 0;
bottomGap = -5;
transparency = 0;
widgetTransparency = 1;
squareCorners = true;
noBackground = false;
gothCornersEnabled = false;
gothCornerRadiusOverride = false;
gothCornerRadiusValue = 12;
borderEnabled = false;
borderColor = "primary";
borderOpacity = 1;
borderThickness = 2;
widgetOutlineEnabled = false;
widgetOutlineColor = "primary";
widgetOutlineOpacity = 1;
widgetOutlineThickness = 1;
fontScale = 1;
autoHide = false;
autoHideDelay = 250;
openOnOverview = false;
visible = true;
popupGapsAuto = true;
popupGapsManual = 4;
maximizeDetection = true;
};
primaryBar =
{
id = "default";
name = "Primary Bar";
screenPreferences = [
{
name = (builtins.head config.monitors).name or "";
}
];
showOnLastDisplay = true;
leftWidgets = [
"launcherButton"
"workspaceSwitcher"
"runningApps"
];
centerWidgets = [
"focusedWindow"
];
rightWidgets = [
"music"
"systemTray"
"cpuUsage"
"controlCenterButton"
"notificationButton"
"clock"
];
}
// commonBarSettings;
secondaryBar =
{
id = "secondary";
name = "Secondary Bar";
screenPreferences = builtins.map (monitor: {
inherit (monitor) name;
}) (builtins.tail config.monitors);
showOnLastDisplay = false;
leftWidgets = [
"workspaceSwitcher"
];
centerWidgets = [];
rightWidgets = [];
}
// commonBarSettings;
in {
fireproof.home-manager = {
programs.dankMaterialShell.default.settings = {
launcherLogoMode = "os";
launcherLogoContrast = 1;
launcherLogoSizeOffset = 3;
centeringMode = "geometric";
runningAppsCurrentWorkspace = true;
runningAppsGroupByApp = true;
barConfigs = [primaryBar secondaryBar];
};
};
}

View file

@ -0,0 +1,70 @@
{
inputs,
pkgs,
...
}: {
imports = [
./theme.nix
./background.nix
./bar.nix
];
systemd.user.services.niri-flake-polkit.enable = false;
fireproof.home-manager = {
imports = [
inputs.dankMaterialShell.homeModules.dankMaterialShell.default
];
programs.dankMaterialShell = {
enable = true;
enableDynamicTheming = false;
enableClipboard = false;
enableVPN = false;
enableCalendarEvents = false;
default.settings = {
# General Settings
weatherCoordinates = "56.1496278,10.2134046";
# Lock Screen
loginctlLockIntegration = true;
fadeToLockEnabled = true;
fadeToLockGracePeriod = 5;
acMonitorTimeout = 1800;
acLockTimeout = 600;
acSuspendTimeout = 0;
batteryMonitorTimeout = 600;
batteryLockTimeout = 300;
batterySuspendTimeout = 1800;
# Power Menu
powerMenuActions = [
"reboot"
"logout"
"poweroff"
"lock"
"suspend"
];
powerMenuDefaultAction = "lock";
};
};
systemd.user.services = {
# A hack to always serve fresh settings from default-settings.json
dms-clean-settings = {
Unit = {
Description = "Delete DankMaterialShell settings before dms starts";
Before = ["dms.service"];
};
Service = {
Type = "oneshot";
ExecStart = "${pkgs.coreutils}/bin/rm -f %h/.config/DankMaterialShell/settings.json";
};
Install.WantedBy = ["dms.service"];
};
};
};
}

View file

@ -0,0 +1,43 @@
{username, ...}: {
fireproof.home-manager = {
home.file.".config/DankMaterialShell/colors.json".text = builtins.toJSON {
name = "custom";
primary = "#CF6A4C";
primaryText = "#F2F0E5";
primaryContainer = "#403E3C";
secondary = "#CE5D97";
surface = "#343331";
surfaceText = "#DAD8CE";
surfaceVariant = "#1C1B1A";
surfaceVariantText = "#B7B5AC";
surfaceTint = "#CF6A4C";
background = "#100F0F";
backgroundText = "#F2F0E5";
outline = "#878580";
surfaceContainer = "#1C1B1A";
surfaceContainerHigh = "#282726";
surfaceContainerHighest = "#403E3C";
error = "#D14D41";
warning = "#D0A215";
info = "#4385BE";
matugen_type = "scheme-expressive";
};
programs.dankMaterialShell.default.settings = {
# Color theme
currentThemeName = "custom";
customThemeFile = "/home/${username}/.config/DankMaterialShell/colors.json";
widgetBackgroundColor = "sth";
widgetColorMode = "default";
# General
cornerRadius = 8;
# Font
fontFamily = "Inter Variable";
monoFontFamily = "Hack Nerd Font Mono";
fontWeight = 400;
fontScale = 1;
};
};
}

View file

@ -1,26 +0,0 @@
{
config,
inputs,
pkgs,
pkgsUnstable,
...
}: let
fireproofPkgs = inputs.fireproof-shell.packages.${pkgs.system};
in {
environment.systemPackages = [
fireproofPkgs.fireproof-shell
fireproofPkgs.fireproof-ipc
pkgsUnstable.astal.io
];
programs.fireproof-shell = {
enable = true;
settings = {
monitor.main = (builtins.head config.monitors).name or "";
launcher.uwsm = true;
notification.ignore = ["/^Spotify/"];
tray.ignore = ["/spotify/"];
};
};
fireproof.home-manager.wayland.windowManager.hyprland.settings.execr = ["pkill .fireproof-shel; fireproof-shell"];
}

View file

@ -1,5 +0,0 @@
{pkgs, ...}: {
environment.systemPackages = [
pkgs.fuzzel
];
}

View file

@ -3,7 +3,7 @@
enable = true;
settings = {
default_session = {
command = "${pkgs.greetd.tuigreet}/bin/tuigreet --user-menu";
command = "${pkgs.tuigreet}/bin/tuigreet --user-menu";
};
};
};

View file

@ -1,307 +0,0 @@
{
lib,
config,
pkgs,
pkgsUnstable,
...
}:
with lib; let
cfg = config.fireproof;
primaryMonitorName = (builtins.head config.monitors).name or "";
color = {
bg = "rgb(1C1B1A)";
ui = "rgb(343331)";
fg = "rgb(DAD8CE)";
accent = "rgb(CF6A4C)";
black = "rgb(100F0F)";
transparent = "rgba(00000000)";
};
record_script = pkgs.writeShellScriptBin "record_script" ''
DIR="$HOME/recordings"
FILE="$DIR/$(date '+%Y-%m-%d_%H.%M.%S').mp4"
mkdir -p $DIR
if pgrep -f ${lib.getExe pkgs.wf-recorder} > /dev/null; then
pkill ${lib.getExe pkgs.wf-recorder}
${pkgs.libnotify}/bin/notify-send "Recording Stopped" "Recording saved to $FILE"
else
# Stolen from grimblast
FULLSCREEN_WORKSPACES="$(hyprctl workspaces -j | jq -r 'map(select(.hasfullscreen) | .id)')"
WORKSPACES="$(hyprctl monitors -j | jq -r '[(foreach .[] as $monitor (0; if $monitor.specialWorkspace.name == "" then $monitor.activeWorkspace else $monitor.specialWorkspace end)).id]')"
WINDOWS="$(hyprctl clients -j | jq -r --argjson workspaces "$WORKSPACES" --argjson fullscreenWorkspaces "$FULLSCREEN_WORKSPACES" 'map((select(([.workspace.id] | inside($workspaces)) and ([.workspace.id] | inside($fullscreenWorkspaces) | not) or .fullscreen > 0)))')"
GEOMETRY=$(echo "$WINDOWS" | jq -r '.[] | "\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"' | ${lib.getExe pkgs.slurp})
# ${pkgs.libnotify}/bin/notify-send "Starting recording" "Recording in 3 seconds" -a "record_script" -t 1000
# sleep 1
# ${pkgs.libnotify}/bin/notify-send "Starting recording" "Recording in 2 seconds" -a "record_script" -t 1000
# sleep 1
# ${pkgs.libnotify}/bin/notify-send "Starting recording" "Recording in 1 second" -t 1000
# sleep 1
${pkgs.wf-recorder}/bin/wf-recorder --pixel-format yuv420p -f "$FILE" -t --geometry "$GEOMETRY" & disown
${pkgs.wl-clipboard}/bin/wl-copy < "$FILE"
fi
'';
mkKeyboard = name: {
inherit name;
kb_layout = "eu";
};
mkMouse = name: sensitivity: {
inherit name;
inherit sensitivity;
};
in {
imports = [
./hyprpolkitagent.nix
./hyprpaper.nix
./hyprlock.nix
./hypridle.nix
];
config = {
programs.uwsm.enable = true;
programs.hyprland = {
package = pkgsUnstable.hyprland;
portalPackage = pkgsUnstable.xdg-desktop-portal-hyprland;
enable = true;
withUWSM = true;
xwayland.enable = true;
};
security.polkit.enable = true;
services.dbus.enable = true;
services.systembus-notify.enable = true;
environment.sessionVariables.NIXOS_OZONE_WL = "1";
environment.systemPackages = with pkgs; [
hyprcursor
];
fireproof.home-manager = {
wayland.windowManager.hyprland = {
enable = true;
xwayland.enable = true;
systemd.enable = false; # Conficts with UWSM
settings = {
env = [
"HYPRCURSOR_THEME,Adwaita"
"HYPRCURSOR_SIZE,24"
];
monitor =
map (
m: let
name =
if m.name != null
then m.name
else "";
resolution =
if m.resolution != null
then "${builtins.toString m.resolution.width}x${builtins.toString m.resolution.height}"
else "preferred";
refreshRate =
if m.refreshRate != null
then "@${builtins.toString m.refreshRate}"
else "";
position = "${builtins.toString m.position.x}x${builtins.toString m.position.y}";
transform =
if m.transform != null
then ", transform, ${builtins.toString m.transform}"
else "";
in "${name}, ${resolution}${refreshRate}, ${position}, 1${transform}"
)
config.monitors;
exec = [
"systemctl --user start hyprpaper"
"systemctl --user start hypridle"
];
input = {
# Most unknown keyboards will be of the DK layout, we set known keyboards to eu in `devices`
kb_layout = "dk";
kb_options = "caps:backspace";
# Cursor focus will be detached from keyboard focus. Clicking on a window will move keyboard focus to that window.
follow_mouse = 2;
touchpad = {
natural_scroll = false;
};
sensitivity = 0;
accel_profile = "flat";
};
workspace =
if primaryMonitorName != ""
then [
"1, monitor:${primaryMonitorName}, persistent:true, default:true"
"2, monitor:${primaryMonitorName}, persistent:true"
"3, monitor:${primaryMonitorName}, persistent:true"
"4, monitor:${primaryMonitorName}, persistent:true"
"5, monitor:${primaryMonitorName}, persistent:true"
]
else [
"1, persistent:true, default:true"
"2, persistent:true"
"3, persistent:true"
"4, persistent:true"
"5, persistent:true"
];
# Names can be found with:
# $ hyprctl devices -j | jq '.["keyboards"].[].name' -r | grep -vE "(system|consumer)-control"
device =
[
# $ hyprctl devices -j | jq '.["mice"].[].name' -r
(mkMouse "logitech-usb-ps/2-optical-mouse" 0.2)
]
++ map mkKeyboard [
"splitkb-kyria-rev1"
"zsa-technology-labs-inc-ergodox-ez-shine"
"mattia-dal-ben-redox_wireless"
"zsa-technology-labs-inc-ergodox-ez-shine-keyboard"
];
general = {
gaps_in = 5;
gaps_out = 10;
border_size = 2;
"col.active_border" = color.accent;
"col.inactive_border" = color.ui;
layout = "dwindle";
};
cursor = {
no_warps = true;
};
misc = {
focus_on_activate = true;
disable_hyprland_logo = true;
background_color = color.bg;
force_default_wallpaper = 0;
middle_click_paste = false;
font_family = "Hack Nerd Font";
};
decoration = {
rounding = 8;
rounding_power = 4;
shadow = {
enabled = true;
color = "rgba(1a1a1aee)";
};
};
animations = {
enabled = true;
animation = [
"windows, 1, 4, default"
"windowsOut, 1, 4, default, popin 80%"
"border, 1, 10, default"
"borderangle, 1, 8, default"
"fade, 1, 7, default"
"workspaces, 1, 3, default"
];
};
dwindle = {
pseudotile = true;
preserve_split = true;
force_split = 2;
use_active_for_splits = true;
};
group = {
auto_group = false;
"col.border_inactive" = color.bg;
"col.border_active" = color.accent;
groupbar = {
enabled = true;
font_size = 12;
gradients = false;
height = 16;
indicator_height = 2;
"col.inactive" = color.ui;
"col.active" = color.accent;
"text_color" = color.fg;
};
};
bind = [
"SUPER, RETURN, exec, ${getExe config.programs.uwsm.package} app -- ${cfg.base.defaults.terminal}"
"SUPER, BACKSPACE, killactive"
"SUPER, SPACE, exec, astal launcher"
"SUPER, semicolon, exec, astal launcher .e"
"SUPER, p, exec, ${getExe config.programs.uwsm.package} app -- ${pkgs.systemd}/bin/loginctl lock-session"
", Print, exec, ${lib.getExe pkgs.grimblast} save area - | ${lib.getExe pkgs.satty} -f -"
"SHIFT, Print, exec, ${lib.getExe pkgs.grimblast} --freeze save area - | ${lib.getExe pkgs.satty} -f -"
"CTRL, Print, exec, ${lib.getExe record_script}"
"SUPER, S, togglefloating"
"SUPER, A, pseudo"
"SUPER, D, fullscreen"
"SUPER, BACKSLASH, togglesplit"
"SUPER, left, movefocus, l"
"SUPER, right, movefocus, r"
"SUPER, up, movefocus, u"
"SUPER, down, movefocus, d"
"SUPER, h, movefocus, l"
"SUPER, l, movefocus, r"
"SUPER, k, movefocus, u"
"SUPER, j, movefocus, d"
"SUPER, p, submap, preselect"
"SUPER, q, workspace, 1"
"SUPER, w, workspace, 2"
"SUPER, e, workspace, 3"
"SUPER, r, workspace, 4"
"SUPER, t, workspace, 5"
"SUPER SHIFT, q, movetoworkspace, 1"
"SUPER SHIFT, w, movetoworkspace, 2"
"SUPER SHIFT, e, movetoworkspace, 3"
"SUPER SHIFT, r, movetoworkspace, 4"
"SUPER SHIFT, t, movetoworkspace, 5"
"SUPER SHIFT, h, workspace, r-1"
"SUPER SHIFT, l, workspace, r+1"
"SUPER, M, togglegroup"
"SUPER, tab, changegroupactive, f"
"SUPER SHIFT, tab, changegroupactive, b"
];
bindm = [
"SUPER, mouse:272, movewindow"
"SUPER, mouse:273, resizewindow"
];
layerrule = [
"noanim, gtk4-layer-shell"
];
windowrulev2 = [
# Screenshots
"float,class:^(com.gabm.satty)$"
"dimaround,class:^(com.gabm.satty)$"
# Firefox
"float,class:^(firefox)$,title:^(Picture-in-Picture)$"
"float,class:^(firefox)$,title:^(Library)$"
"float,class:^(firefox)$,title:^(Bitwarden Password Manager)$"
# JetBrains
"center,class:^(jetbrains-.*)$,title:^$,floating:1"
"noinitialfocus,class:^(jetbrains-.*)$,title:^$,floating:1"
"noanim,class:^(jetbrains-.*)$,title:^$,floating:1"
"center,class:^(jetbrains-.*)$,title:^(splash)$,floating:1"
"nofocus,class:^(jetbrains-.*)$,title:^(splash)$,floating:1"
"noborder,class:^(jetbrains-.*)$,title:^(splash)$,floating:1"
];
};
};
};
};
}

View file

@ -1,33 +0,0 @@
{
config,
pkgs,
...
}: let
sleep_cmd = "${config.programs.hyprland.package}/bin/hyprctl dispatch dpms off";
wake_cmd = "${config.programs.hyprland.package}/bin/hyprctl dispatch dpms on";
lock_cmd = "pidof ${pkgs.hyprlock}/bin/hyprlock || ${pkgs.hyprlock}/bin/hyprlock";
in {
config = {
fireproof.home-manager.services.hypridle = {
enable = true;
settings = {
general = {
inherit lock_cmd;
before_sleep_cmd = "${pkgs.systemd}/bin/loginctl lock-session";
after_sleep_cmd = sleep_cmd;
};
listener = [
{
timeout = 60 * 5;
on-timeout = lock_cmd;
}
{
timeout = 60 * 15;
on-timeout = sleep_cmd;
on-resume = wake_cmd;
}
];
};
};
};
}

View file

@ -1,97 +0,0 @@
{
lib,
config,
pkgs,
...
}: let
background = pkgs.stdenvNoCC.mkDerivation {
pname = "desktop-background";
version = "0.2";
src = lib.fileset.toSource {
root = ./.;
fileset = lib.fileset.unions [
./backgrounds/unknown.svg
];
};
nativeBuildInputs = [pkgs.inkscape];
buildPhase = ''
inkscape -w 3840 -h 2160 backgrounds/unknown.svg -o unknown.png
'';
installPhase = ''
mkdir -p $out/share/backgrounds
cp *.svg *.png $out/share/backgrounds
'';
};
# Re-use the same color scheme as in the main Hyprland config
color = {
bg = "rgb(28, 27, 26)";
ui = "rgb(52, 51, 49)";
fg = "rgb(218, 216, 206)";
transparent = "rgba(0, 0, 0, 0)";
};
in {
config = {
fireproof.home-manager.programs.hyprlock = {
enable = true;
settings = {
general = {
disable_loading_bar = false;
grace = 0;
no_fade_in = false;
};
background = {
monitor = "";
color = color.bg;
path = background + "/share/backgrounds/unknown.png";
};
input-field = {
monitor = "";
size = "250, 60";
outline_thickness = 2;
dots_size = 0.2;
dots_spacing = 0.2;
dots_center = true;
outer_color = color.transparent;
inner_color = color.ui;
font_color = color.fg;
fade_on_empty = false;
font_family = "Hack Nerd Font";
placeholder_text = "";
hide_input = false;
position = "0, -35";
halign = "center";
valign = "center";
rounding = 8;
};
shape = [
{
monitor = "";
color = color.ui;
halign = "center";
valign = "center";
size = "150, 60";
position = "0, 35";
rounding = 8;
}
];
label = [
{
monitor = "";
text = "cmd[update:1000] echo \"<span>$(date +\"%H:%M\")</span>\"";
color = color.fg;
font_size = 30;
font_family = "Hack Nerd Font";
position = "0, 35";
halign = "center";
valign = "center";
}
];
};
};
};
}

View file

@ -1,26 +0,0 @@
{
pkgs,
config,
...
}: {
config = {
fireproof.home-manager.systemd.user.services.hyprpolkitagent = {
Unit = {
Description = "Hyprland Polkit Authentication Agent";
};
Service = {
Type = "simple";
ExecStart = "${pkgs.hyprpolkitagent}/libexec/hyprpolkitagent";
Restart = "on-failure";
RestartSec = 1;
TimeoutStopSec = 10;
Slice = "session.slice";
};
Install = {
WantedBy = ["graphical-session.target"];
};
};
};
}

View file

@ -1,17 +0,0 @@
{pkgs, ...}: {
fireproof.home-manager.services.mako.enable = true;
systemd.user.services."mako" = {
description = "Mako notification daemon";
documentation = ["man:mako(1)"];
partOf = ["graphical-session.target"];
after = ["graphical-session.target"];
serviceConfig = {
Type = "dbus";
BusName = "org.freedesktop.Notifications";
ExecCondition = "/bin/sh -c '[ -n \"$WAYLAND_DISPLAY\" ]'";
ExecReload = "${pkgs.mako}/bin/mako reload";
ExecStart = "${pkgs.mako}/bin/mako";
};
wantedBy = ["graphical-session.target"];
};
}

View file

@ -8,6 +8,8 @@
primaryMonitorName = (builtins.head config.monitors).name or "";
in {
# TODO: Move these to a separate module
programs.xwayland.enable = true;
fireproof.home-manager.programs.waybar = {
enable = true;
systemd.enable = true;
@ -117,6 +119,10 @@ in {
{command = ["systemctl" "--user" "start" "mako"];}
{command = ["systemctl" "--user" "start" "waybar"];}
];
xwayland-satellite = {
enable = true;
path = lib.getExe inputs.niri.packages."${pkgs.system}".xwayland-satellite-unstable;
};
environment = {
NIXOS_OZONE_WL = "1";
GDK_BACKEND = "wayland"; # Attempt to fix screen recording issue
@ -180,39 +186,43 @@ in {
binds = {
"XF86AudioRaiseVolume" = {
allow-when-locked = true;
action.spawn = [
"wpctl"
"set-volume"
"@DEFAULT_AUDIO_SINK@"
"0.1+"
];
action.spawn = ["dms" "ipc" "audio" "increment" "3"];
};
"XF86AudioLowerVolume" = {
allow-when-locked = true;
action.spawn = [
"wpctl"
"set-volume"
"@DEFAULT_AUDIO_SINK@"
"0.1-"
];
action.spawn = ["dms" "ipc" "audio" "decrement" "3"];
};
"XF86AudioMute" = {
allow-when-locked = true;
action.spawn = [
"wpctl"
"set-mute"
"@DEFAULT_AUDIO_SINK@"
"toggle"
];
action.spawn = ["dms" "ipc" "audio" "mute"];
};
"XF86AudioMicMute" = {
allow-when-locked = true;
action.spawn = [
"wpctl"
"set-mute"
"@DEFAULT_AUDIO_SOURCE@"
"toggle"
];
action.spawn = ["dms" "ipc" "audio" "micmute"];
};
"XF86MonBrightnessUp" = {
allow-when-locked = true;
action.spawn = ["dms" "ipc" "brightness" "increment" "5"];
};
"XF86MonBrightnessDown" = {
allow-when-locked = true;
action.spawn = ["dms" "ipc" "brightness" "decrement" "5"];
};
"Mod+N" = {
action.spawn = ["dms" "ipc" "notifications" "toggle"];
hotkey-overlay.title = "Toggle Notification Center";
};
"Mod+V" = {
action.spawn = ["dms" "ipc" "clipboard" "toggle"];
hotkey-overlay.title = "Toggle Clipboard Manager";
};
"Mod+Space" = {
action.spawn = ["dms" "ipc" "spotlight" "toggle"];
hotkey-overlay.title = "Toggle Application Launcher";
};
"Mod+P" = {
action.spawn = ["dms" "ipc" "powermenu" "toggle"];
hotkey-overlay.title = "Toggle Power Menu";
};
"Mod+Left".action.focus-column-or-monitor-left = {};
@ -291,7 +301,6 @@ in {
"Mod+Slash".action.show-hotkey-overlay = {};
"Mod+Return".action.spawn = ["ghostty"];
"Mod+Space".action.spawn = ["fuzzel"];
"Mod+Backspace".action.close-window = {};
};

View file

@ -8,7 +8,8 @@
# Some python packages requires shared libraries to build C extensions.
mkWrapLDLibraryPath = pkg: let
mainProgram = pkg.meta.mainProgram or pkg.pname or (lib.getName pkg);
in pkgs.symlinkJoin {
in
pkgs.symlinkJoin {
name = "${pkg.name}-wrapped";
paths = [pkg];
nativeBuildInputs = [pkgs.makeWrapper];

View file

@ -3,7 +3,6 @@
./apps/pycharm.nix
./apps/vscode.nix
./apps/sublime-merge.nix
./apps/ollama.nix
./dev/python.nix
./dev/javascript.nix
./dev/k8s.nix

View file

@ -3,14 +3,11 @@
./hardware/monitors.nix
./hardware/audio.nix
./desktop/fonts.nix
./desktop/fireproof-shell.nix
./desktop/greetd.nix
./desktop/niri.nix
./desktop/fuzzel.nix
./desktop/mako.nix
./desktop/hyprland/default.nix
./desktop/gtk/default.nix
./desktop/qt.nix
./desktop/dms/default.nix
./desktop/screenshot.nix
./apps/spotify.nix
./apps/firefox.nix

View file

@ -76,7 +76,7 @@ in {
};
programs.ssh.startAgent = true;
services.gnome.gcr-ssh-agent.enable = false; #
services.gnome.gcr-ssh-agent.enable = false;
services.openssh = {
enable = true;