Compare commits
2 commits
14193c05fb
...
a2192c9341
| Author | SHA1 | Date | |
|---|---|---|---|
| a2192c9341 | |||
| e961180371 |
39 changed files with 239 additions and 1728 deletions
200
flake.lock
generated
200
flake.lock
generated
|
|
@ -1,29 +1,48 @@
|
||||||
{
|
{
|
||||||
"nodes": {
|
"nodes": {
|
||||||
"colmena": {
|
"cerulean": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-compat": "flake-compat",
|
"deploy-rs": "deploy-rs",
|
||||||
"flake-utils": "flake-utils",
|
"mix": "mix",
|
||||||
"nix-github-actions": "nix-github-actions",
|
"nib": "nib",
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"nixpkgs-unstable": [
|
||||||
"nixpkgs-unstable"
|
"nixpkgs-unstable"
|
||||||
],
|
],
|
||||||
"stable": [
|
"systems": [
|
||||||
"nixpkgs"
|
"systems"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1734374287,
|
"lastModified": 1770552327,
|
||||||
"narHash": "sha256-rINodqeUuezuCWOnpJgrH7u9vJ86fYT+Dj8Mu8T/IBc=",
|
"narHash": "sha256-cVVPdC650MRP4tMSB9EcECUpc0U4HWSZzoQnpEHH0uE=",
|
||||||
"owner": "zhaofengli",
|
"path": "/home/me/agribit/nexus/Cerulean",
|
||||||
"repo": "colmena",
|
"type": "path"
|
||||||
"rev": "47b6414d800c8471e98ca072bc0835345741a56a",
|
},
|
||||||
|
"original": {
|
||||||
|
"path": "/home/me/agribit/nexus/Cerulean",
|
||||||
|
"type": "path"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"deploy-rs": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-compat": "flake-compat",
|
||||||
|
"nixpkgs": "nixpkgs",
|
||||||
|
"utils": "utils"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1766051518,
|
||||||
|
"narHash": "sha256-znKOwPXQnt3o7lDb3hdf19oDo0BLP4MfBOYiWkEHoik=",
|
||||||
|
"owner": "serokell",
|
||||||
|
"repo": "deploy-rs",
|
||||||
|
"rev": "d5eff7f948535b9c723d60cd8239f8f11ddc90fa",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "zhaofengli",
|
"owner": "serokell",
|
||||||
"repo": "colmena",
|
"repo": "deploy-rs",
|
||||||
"rev": "47b6414d800c8471e98ca072bc0835345741a56a",
|
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -56,11 +75,11 @@
|
||||||
"flake-compat": {
|
"flake-compat": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1650374568,
|
"lastModified": 1733328505,
|
||||||
"narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=",
|
"narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=",
|
||||||
"owner": "edolstra",
|
"owner": "edolstra",
|
||||||
"repo": "flake-compat",
|
"repo": "flake-compat",
|
||||||
"rev": "b4a34015c698c7793d592d66adbab377907a2be8",
|
"rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -101,25 +120,6 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"flake-utils": {
|
|
||||||
"inputs": {
|
|
||||||
"systems": [
|
|
||||||
"systems"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1731533236,
|
|
||||||
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
|
||||||
"owner": "numtide",
|
|
||||||
"repo": "flake-utils",
|
|
||||||
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"id": "flake-utils",
|
|
||||||
"type": "indirect"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"grub2-themes": {
|
"grub2-themes": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
|
|
@ -140,6 +140,48 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"mix": {
|
||||||
|
"inputs": {
|
||||||
|
"nib": [
|
||||||
|
"cerulean",
|
||||||
|
"nib"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1768525804,
|
||||||
|
"narHash": "sha256-jlpNb7Utqfdq2HESAB1mtddWHOsxKlTjPiLFRLd35r8=",
|
||||||
|
"owner": "emilelcb",
|
||||||
|
"repo": "mix",
|
||||||
|
"rev": "617d8915a6518a3d4e375b87c50ae34d9daee6c6",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "emilelcb",
|
||||||
|
"repo": "mix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nib": {
|
||||||
|
"inputs": {
|
||||||
|
"systems": [
|
||||||
|
"cerulean",
|
||||||
|
"systems"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1768472076,
|
||||||
|
"narHash": "sha256-bdVRCDy6oJx/CZiyxkke783FgtBW//wDuOAITUsQcNc=",
|
||||||
|
"owner": "emilelcb",
|
||||||
|
"repo": "nib",
|
||||||
|
"rev": "42ac66dfc180a13af1cc8850397db66ec5556991",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "emilelcb",
|
||||||
|
"repo": "nib",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"nix-flatpak": {
|
"nix-flatpak": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1767983141,
|
"lastModified": 1767983141,
|
||||||
|
|
@ -156,27 +198,6 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nix-github-actions": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"colmena",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1729742964,
|
|
||||||
"narHash": "sha256-B4mzTcQ0FZHdpeWcpDYPERtyjJd/NIuaQ9+BV1h+MpA=",
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "nix-github-actions",
|
|
||||||
"rev": "e04df33f62cdcf93d73e9a04142464753a16db67",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "nix-github-actions",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixcord": {
|
"nixcord": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-compat": "flake-compat_2",
|
"flake-compat": "flake-compat_2",
|
||||||
|
|
@ -201,16 +222,16 @@
|
||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1770536720,
|
"lastModified": 1743014863,
|
||||||
"narHash": "sha256-pbmbaQUuoG+v37b91lqcNcz05YUvVif7iWjIx9lF8R4=",
|
"narHash": "sha256-jAIUqsiN2r3hCuHji80U7NNEafpIMBXiwKlSrjWMlpg=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "3c64ab24b22579c833895b6030c9563837e41a70",
|
"rev": "bd3bac8bfb542dbde7ffffb6987a1a1f9d41699f",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "nixos",
|
"owner": "NixOS",
|
||||||
"ref": "nixos-25.05",
|
"ref": "nixpkgs-unstable",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
|
|
@ -246,16 +267,32 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"nixpkgs_2": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1770536720,
|
||||||
|
"narHash": "sha256-pbmbaQUuoG+v37b91lqcNcz05YUvVif7iWjIx9lF8R4=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "3c64ab24b22579c833895b6030c9563837e41a70",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nixos",
|
||||||
|
"ref": "nixos-25.05",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"root": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"colmena": "colmena",
|
"cerulean": "cerulean",
|
||||||
"dobutterfliescry-net": "dobutterfliescry-net",
|
"dobutterfliescry-net": "dobutterfliescry-net",
|
||||||
"grub2-themes": "grub2-themes",
|
"grub2-themes": "grub2-themes",
|
||||||
"nix-flatpak": "nix-flatpak",
|
"nix-flatpak": "nix-flatpak",
|
||||||
"nixcord": "nixcord",
|
"nixcord": "nixcord",
|
||||||
"nixpkgs": "nixpkgs",
|
"nixpkgs": "nixpkgs_2",
|
||||||
"nixpkgs-unstable": "nixpkgs-unstable",
|
"nixpkgs-unstable": "nixpkgs-unstable",
|
||||||
"systems": "systems"
|
"systems": "systems_2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"systems": {
|
"systems": {
|
||||||
|
|
@ -272,6 +309,39 @@
|
||||||
"repo": "default",
|
"repo": "default",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"systems_2": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681028828,
|
||||||
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"utils": {
|
||||||
|
"inputs": {
|
||||||
|
"systems": "systems"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1731533236,
|
||||||
|
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"root": "root",
|
"root": "root",
|
||||||
|
|
|
||||||
139
flake.nix
139
flake.nix
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
description = "Emile's Nix Dotfiles";
|
description = "im gonna cry again ;-;";
|
||||||
|
|
||||||
inputs = {
|
inputs = {
|
||||||
systems.url = "github:nix-systems/default";
|
systems.url = "github:nix-systems/default";
|
||||||
|
|
@ -7,12 +7,18 @@
|
||||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05";
|
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05";
|
||||||
nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixos-unstable";
|
nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||||
|
|
||||||
colmena = {
|
home-manager = {
|
||||||
url = "github:zhaofengli/colmena/?rev=47b6414d800c8471e98ca072bc0835345741a56a";
|
url = "github:nix-community/home-manager/release-25.05";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
|
cerulean = {
|
||||||
|
# url = "github:emilelcb/Cerulean";
|
||||||
|
url = "/home/me/agribit/nexus/Cerulean";
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.follows = "nixpkgs-unstable";
|
systems.follows = "systems";
|
||||||
stable.follows = "nixpkgs";
|
nixpkgs.follows = "nixpkgs";
|
||||||
flake-utils.inputs.systems.follows = "systems";
|
nixpkgs-unstable.follows = "nixpkgs-unstable";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -38,84 +44,63 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = {
|
outputs = {
|
||||||
self,
|
cerulean,
|
||||||
nixpkgs,
|
home-manager,
|
||||||
nixpkgs-unstable,
|
|
||||||
grub2-themes,
|
grub2-themes,
|
||||||
colmena,
|
|
||||||
...
|
...
|
||||||
} @ inputs: let
|
}: let
|
||||||
system = "x86_64-linux";
|
groups = {
|
||||||
|
cryde = {}; # oh frick i cried again
|
||||||
pkgs = import nixpkgs {
|
server = {};
|
||||||
inherit system;
|
|
||||||
config = {
|
|
||||||
allowUnfree = false; # sanity check
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
in
|
||||||
|
cerulean.mkNexus ./. {
|
||||||
|
nexus = {
|
||||||
|
inherit groups;
|
||||||
|
overlays = import ./overlays;
|
||||||
|
|
||||||
pkgs-unstable = import nixpkgs-unstable {
|
nodes = {
|
||||||
inherit system;
|
# my laptop <3 :3
|
||||||
config = {
|
lolcathost = {
|
||||||
# allowUnfree = true; # TODO: bandaid solution... (for minecraft-server)
|
|
||||||
allowUnfree = false;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
# TODO: come back to this its really cool
|
|
||||||
# this is just something I'm experimenting with
|
|
||||||
# ROOT = ./.;
|
|
||||||
|
|
||||||
specialArgs = {inherit inputs pkgs-unstable;};
|
|
||||||
in {
|
|
||||||
devShells."x86_64-linux".default = pkgs.mkShell {
|
|
||||||
shell = "${pkgs.bash}/bin/bash";
|
|
||||||
|
|
||||||
packages = with pkgs; [
|
|
||||||
# ./script/* dependencies
|
|
||||||
mkpasswd
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
nixosConfigurations = {
|
|
||||||
# i be on my puter fr
|
|
||||||
myputer = nixpkgs.lib.nixosSystem {
|
|
||||||
# nix passes these to every single module
|
|
||||||
inherit specialArgs;
|
|
||||||
|
|
||||||
modules = [
|
|
||||||
./hosts/myputer
|
|
||||||
grub2-themes.nixosModules.default
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
# my laptop 0w0
|
|
||||||
lolcathost = nixpkgs.lib.nixosSystem {
|
|
||||||
inherit specialArgs;
|
|
||||||
|
|
||||||
modules = [
|
|
||||||
./hosts/lolcathost
|
|
||||||
grub2-themes.nixosModules.default
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# remote deployment to my servers!!
|
|
||||||
colmenaHive = colmena.lib.makeHive {
|
|
||||||
meta = {
|
|
||||||
nixpkgs = pkgs;
|
|
||||||
inherit specialArgs;
|
|
||||||
|
|
||||||
# set nixpkgs per server
|
|
||||||
nodeNixpkgs = {
|
|
||||||
hyrule = import nixpkgs {
|
|
||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
config.allowUnfree = false;
|
groups = [groups.cryde];
|
||||||
|
extraModules = [
|
||||||
|
home-manager.nixosModules.default
|
||||||
|
grub2-themes.nixosModules.default
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
# i be on my puter frfr
|
||||||
|
myputer = {
|
||||||
|
system = "x86_64-linux";
|
||||||
|
groups = [groups.cryde];
|
||||||
|
extraModules = [
|
||||||
|
home-manager.nixosModules.default
|
||||||
|
grub2-themes.nixosModules.default
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
# courtesy of aurora <3
|
||||||
|
butterfly = {
|
||||||
|
system = "x86_64-linux";
|
||||||
|
groups = [groups.server];
|
||||||
|
deploy.ssh.host = "dobutterfliescry.net";
|
||||||
|
};
|
||||||
|
|
||||||
|
# pls dont sue me im broke
|
||||||
|
hyrule = {
|
||||||
|
system = "x86_64-linux";
|
||||||
|
groups = [groups.server];
|
||||||
|
deploy.ssh.host = "hyrule.dobutterfliescry.net";
|
||||||
|
};
|
||||||
|
|
||||||
|
# call me a statistician the way she spreads in my sheets
|
||||||
|
matcha = {
|
||||||
|
system = "x86_64-linux";
|
||||||
|
groups = [groups.server];
|
||||||
|
deploy.ssh.host = "bedroom.dobutterfliescry.net";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
# meine vps
|
|
||||||
hyrule = import ./hosts/hyrule;
|
|
||||||
};
|
};
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
lib,
|
lib,
|
||||||
config,
|
config,
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-unstable,
|
upkgs,
|
||||||
...
|
...
|
||||||
} @ args: {
|
} @ args: {
|
||||||
imports = [
|
imports = [
|
||||||
|
|
@ -16,12 +16,9 @@
|
||||||
../modules/bat.nix
|
../modules/bat.nix
|
||||||
|
|
||||||
../modules/editor/helix.nix
|
../modules/editor/helix.nix
|
||||||
(import ../modules/editor/vscode.nix args)
|
|
||||||
|
|
||||||
../modules/firefox.nix
|
../modules/firefox.nix
|
||||||
../modules/apps/thunderbird.nix
|
../modules/apps/thunderbird.nix
|
||||||
|
|
||||||
#../modules/wm/hypr/hypridle.nix
|
|
||||||
../modules/wm/hypr/hyprlock.nix
|
../modules/wm/hypr/hyprlock.nix
|
||||||
../modules/kanshi.nix
|
../modules/kanshi.nix
|
||||||
../modules/mako.nix
|
../modules/mako.nix
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-unstable,
|
upkgs,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
lsps = {
|
lsps = {
|
||||||
|
|
@ -43,7 +43,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
ty = {
|
ty = {
|
||||||
pkg = pkgs-unstable.ty;
|
pkg = upkgs.ty;
|
||||||
cmd = "ty";
|
cmd = "ty";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
{pkgs-unstable, ...}: {
|
{upkgs, ...}: {
|
||||||
programs.foot = {
|
programs.foot = {
|
||||||
enable = true;
|
enable = true;
|
||||||
package = pkgs-unstable.foot;
|
package = upkgs.foot;
|
||||||
|
|
||||||
server.enable = true;
|
server.enable = true;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-unstable,
|
upkgs,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
home-manager = builtins.fetchTarball {
|
home-manager = builtins.fetchTarball {
|
||||||
|
|
@ -40,17 +40,6 @@ in {
|
||||||
keyMap = "us";
|
keyMap = "us";
|
||||||
};
|
};
|
||||||
|
|
||||||
# colmena deployment configuration
|
|
||||||
deployment = {
|
|
||||||
targetHost = "imbored.dev";
|
|
||||||
targetUser = "ae";
|
|
||||||
targetPort = 22;
|
|
||||||
sshOptions = [
|
|
||||||
"-A" # forward ssh-agent
|
|
||||||
];
|
|
||||||
buildOnTarget = false; # build locally then deploy
|
|
||||||
};
|
|
||||||
|
|
||||||
# super duper minimum grub2 config
|
# super duper minimum grub2 config
|
||||||
boot.loader.grub = {
|
boot.loader.grub = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-unstable,
|
upkgs,
|
||||||
...
|
...
|
||||||
}: {
|
}: {
|
||||||
services.minecraft-server = {
|
services.minecraft-server = {
|
||||||
enable = true;
|
enable = true;
|
||||||
package = pkgs-unstable.minecraft-server; # use latest version only!
|
package = upkgs.minecraft-server; # use latest version only!
|
||||||
declarative = true;
|
declarative = true;
|
||||||
|
|
||||||
eula = true;
|
eula = true;
|
||||||
|
|
|
||||||
|
|
@ -1,37 +1,20 @@
|
||||||
{
|
{
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-unstable,
|
upkgs,
|
||||||
inputs,
|
inputs,
|
||||||
config,
|
config,
|
||||||
...
|
...
|
||||||
}: let
|
}: {
|
||||||
home-manager = builtins.fetchTarball {
|
|
||||||
url = "https://github.com/nix-community/home-manager/archive/release-25.05.tar.gz";
|
|
||||||
sha256 = "07pk5m6mxi666dclaxdwf7xrinifv01vvgxn49bjr8rsbh31syaq";
|
|
||||||
};
|
|
||||||
in {
|
|
||||||
imports = [
|
imports = [
|
||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
(import "${home-manager}/nixos")
|
|
||||||
|
|
||||||
../modules/bashistrans.nix
|
../modules/bashistrans.nix
|
||||||
|
|
||||||
../modules/wm/hyprland.nix
|
../modules/wm/hyprland.nix
|
||||||
# ../modules/wm/river.nix
|
|
||||||
../modules/wm/crywl.nix
|
|
||||||
|
|
||||||
../modules/steam.nix
|
../modules/steam.nix
|
||||||
../modules/obsidian.nix
|
../modules/obsidian.nix
|
||||||
|
|
||||||
../modules/angryoxide.nix
|
|
||||||
# ../modules/flipperzero.nix
|
|
||||||
# ../modules/chameleonultragui.nix
|
|
||||||
|
|
||||||
(import ../../overlays/default.nix {
|
|
||||||
inherit pkgs;
|
|
||||||
upkgs = pkgs-unstable;
|
|
||||||
})
|
|
||||||
];
|
];
|
||||||
|
|
||||||
nix.settings.experimental-features = [
|
nix.settings.experimental-features = [
|
||||||
|
|
@ -41,7 +24,6 @@ in {
|
||||||
];
|
];
|
||||||
|
|
||||||
nixpkgs.config.allowUnfreePredicate = let
|
nixpkgs.config.allowUnfreePredicate = let
|
||||||
vscext = pkgs.vscode-extensions;
|
|
||||||
whitelist = with pkgs;
|
whitelist = with pkgs;
|
||||||
map lib.getName [
|
map lib.getName [
|
||||||
discord
|
discord
|
||||||
|
|
@ -53,18 +35,6 @@ in {
|
||||||
|
|
||||||
obsidian
|
obsidian
|
||||||
gitkraken
|
gitkraken
|
||||||
|
|
||||||
vscode
|
|
||||||
vscext.ms-dotnettools.csharp
|
|
||||||
vscext.ms-dotnettools.csdevkit
|
|
||||||
vscext.github.copilot
|
|
||||||
vscext.github.copilot-chat
|
|
||||||
|
|
||||||
# XXX: DEBUG
|
|
||||||
# rider-override
|
|
||||||
# XXX: DEBUG
|
|
||||||
|
|
||||||
# jetbrains.rider
|
|
||||||
];
|
];
|
||||||
in
|
in
|
||||||
pkg: builtins.elem (lib.getName pkg) whitelist;
|
pkg: builtins.elem (lib.getName pkg) whitelist;
|
||||||
|
|
@ -237,7 +207,7 @@ in {
|
||||||
|
|
||||||
home-manager = {
|
home-manager = {
|
||||||
users.me = import ../../homes/me;
|
users.me = import ../../homes/me;
|
||||||
extraSpecialArgs = {inherit inputs pkgs pkgs-unstable;};
|
extraSpecialArgs = {inherit inputs pkgs upkgs;};
|
||||||
sharedModules = [];
|
sharedModules = [];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -258,7 +228,6 @@ in {
|
||||||
# ---- SYSTEM PACKAGES -----
|
# ---- SYSTEM PACKAGES -----
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
# User Environment
|
# User Environment
|
||||||
# crywl
|
|
||||||
swww
|
swww
|
||||||
helvum
|
helvum
|
||||||
easyeffects
|
easyeffects
|
||||||
|
|
@ -297,7 +266,7 @@ in {
|
||||||
hexyl
|
hexyl
|
||||||
# ASM
|
# ASM
|
||||||
nasm
|
nasm
|
||||||
(callPackage ../packages/x86-manpages {})
|
# x86-manpages # WARNING: cerulean doesn't allow overlays bruh
|
||||||
# C Family
|
# C Family
|
||||||
gcc
|
gcc
|
||||||
clang
|
clang
|
||||||
|
|
@ -323,7 +292,7 @@ in {
|
||||||
nix-prefetch-git
|
nix-prefetch-git
|
||||||
nix-index
|
nix-index
|
||||||
nix-unit
|
nix-unit
|
||||||
deploy-rs
|
deploy-rs.deploy-rs
|
||||||
|
|
||||||
# Python
|
# Python
|
||||||
python312 # I use 3.12 since it's in a pretty stable state now
|
python312 # I use 3.12 since it's in a pretty stable state now
|
||||||
|
|
@ -389,20 +358,13 @@ in {
|
||||||
|
|
||||||
# Games
|
# Games
|
||||||
prismlauncher # minecraft
|
prismlauncher # minecraft
|
||||||
pkgs-unstable.olympus # celeste
|
upkgs.olympus # celeste
|
||||||
discord
|
discord
|
||||||
discordo
|
discordo
|
||||||
ekphos
|
# ekphos # WARNING: cerulean doesnt allow overlays yet
|
||||||
];
|
];
|
||||||
|
|
||||||
programs = {
|
programs = {
|
||||||
crywl = {
|
|
||||||
enable = true;
|
|
||||||
xwayland.enable = false;
|
|
||||||
defaultSession = false;
|
|
||||||
useUnmodifiedDWL = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
fish.enable = true;
|
fish.enable = true;
|
||||||
|
|
||||||
nix-ld.enable = true;
|
nix-ld.enable = true;
|
||||||
|
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
{pkgs, ...}: {
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
(callPackage ../packages/angryoxide {})
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-unstable,
|
upkgs,
|
||||||
dotnetVersions ? [8 9 10],
|
dotnetVersions ? [8 9 10],
|
||||||
...
|
...
|
||||||
}: {
|
}: {
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
# Ensure latest stable Rider version (not necessarily stable on NixOS)
|
# Ensure latest stable Rider version (not necessarily stable on NixOS)
|
||||||
pkgs-unstable.jetbrains.rider
|
upkgs.jetbrains.rider
|
||||||
|
|
||||||
# NOTE: Blazor requires a Chromium-based browser
|
# NOTE: Blazor requires a Chromium-based browser
|
||||||
chromium
|
chromium
|
||||||
|
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
{pkgs, ...}: {
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
(callPackage ../packages/chameleonultragui {})
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
@ -1,31 +0,0 @@
|
||||||
#### wishlist.nix
|
|
||||||
This is a simple Nix flake defining a service from which
|
|
||||||
wishlist can run automatically. This flake runs wishlist-0.15.1
|
|
||||||
and lacks configurability unfortunately. However this was an
|
|
||||||
intentional choice, allowing wishlist to read from the user's
|
|
||||||
`~/.ssh/config` file, which can be configured seperately using
|
|
||||||
the something akin to the follow home-manager snippet:
|
|
||||||
```nix
|
|
||||||
programs.ssh = {
|
|
||||||
enable = true;
|
|
||||||
addKeysToAgent = "yes"; # always add keys to ssh-agent
|
|
||||||
|
|
||||||
matchBlocks = {
|
|
||||||
hyrule = {
|
|
||||||
hostname = "imbored.dev";
|
|
||||||
user = "ae";
|
|
||||||
port = 22;
|
|
||||||
identityFile = "/home/me/.ssh/id_hyrule";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
This decision was mostly selfish as it was easiest...
|
|
||||||
But it comes at the cost of not being able to set the
|
|
||||||
port wishlist listens on. So for now you're stuck with `2222`.
|
|
||||||
|
|
||||||
###### The Future!! (woooowwww)
|
|
||||||
Create an option for wishlist that is used to construct
|
|
||||||
the `config.yaml` file
|
|
||||||
|
|
@ -1,93 +0,0 @@
|
||||||
{
|
|
||||||
inputs = {
|
|
||||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
|
||||||
flake-utils.url = "github:numtide/flake-utils";
|
|
||||||
};
|
|
||||||
|
|
||||||
outputs = {
|
|
||||||
self,
|
|
||||||
config,
|
|
||||||
nixpkgs,
|
|
||||||
lib,
|
|
||||||
flake-utils,
|
|
||||||
}: let
|
|
||||||
cfg = config.services.wishlist;
|
|
||||||
supportedSystems = ["x86_64-linux" "i686-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin"];
|
|
||||||
in {
|
|
||||||
# TODO: 1. add options (ie one to set whether the server should be enabled),
|
|
||||||
# 2. create a systemd service
|
|
||||||
# 3. create a main program
|
|
||||||
# 4. celibrate
|
|
||||||
|
|
||||||
# TODO: do I need to make this a home-manager option and set the yaml config?
|
|
||||||
|
|
||||||
# define what settings a user can change
|
|
||||||
options = {
|
|
||||||
services.wishlist = with lib; {
|
|
||||||
enable = mkEnableOption "wishlist";
|
|
||||||
|
|
||||||
port = mkOption {
|
|
||||||
type = types.port;
|
|
||||||
default = 2222;
|
|
||||||
description = "Port to listen on";
|
|
||||||
};
|
|
||||||
|
|
||||||
package = mkOption {
|
|
||||||
type = types.package;
|
|
||||||
default = self.packages.${nixpkgs.system}.default;
|
|
||||||
description = "Package to use";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# define a systemd service for wishlist ^_^
|
|
||||||
config = lib.mkIf cfg.enable {
|
|
||||||
systemd.services.wishlist = {
|
|
||||||
description = "Single entrypoint for multiple SSH endpoints";
|
|
||||||
wantedBy = ["multi-user.target"];
|
|
||||||
|
|
||||||
serviceConfig = {
|
|
||||||
DynamicUser = "yes";
|
|
||||||
ExecStart = "${cfg.package}/bin/wishlist serve";
|
|
||||||
Restart = "always";
|
|
||||||
RestartSec = "2s";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
packages = flake-utils.lib.eachSystem supportedSystems (
|
|
||||||
system: let
|
|
||||||
version = "0.15.1";
|
|
||||||
#pkgs = nixpkgs.legacyPackages.${system};
|
|
||||||
pkgs = import nixpkgs {
|
|
||||||
inherit system;
|
|
||||||
config.allowUnfree = false;
|
|
||||||
};
|
|
||||||
#lib = pkgs.lib;
|
|
||||||
in rec {
|
|
||||||
defaultPackage = self.packages.${system}.wishlist;
|
|
||||||
wishlist = pkgs.buildGoModule {
|
|
||||||
pname = "wishlist";
|
|
||||||
inherit version;
|
|
||||||
meta = with lib; {
|
|
||||||
description = "Single entrypoint for multiple SSH endpoints";
|
|
||||||
homepage = "https://github.com/charmbracelet/wishlist";
|
|
||||||
changelog = "https://github.com/charmbracelet/wishlist/releases/tag/v${version}";
|
|
||||||
license = licenses.mit;
|
|
||||||
maintainers = with maintainers; [caarlos0 penguwin];
|
|
||||||
mainProgram = "wishlist";
|
|
||||||
};
|
|
||||||
|
|
||||||
src = pkgs.fetchFromGitHub {
|
|
||||||
owner = "charmbracelet";
|
|
||||||
repo = "wishlist";
|
|
||||||
rev = "v${version}";
|
|
||||||
# rev = "d7f058e115a8b4a4131406d01dde84fb4a8e93c4";
|
|
||||||
hash = "53fojA+gdvpSVNjx6QncH16F8/x+lpY5SkNs7obW2XQ=";
|
|
||||||
};
|
|
||||||
vendorSha256 = "0x6rss3fwv2398wrd5kyzkrqaphzvh4ykwfqai9glxm01y6fhxz7";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -1,99 +0,0 @@
|
||||||
# NOTE: Wishlist service fails on nix because of readonly file system
|
|
||||||
# and it can't find a config file for itself, it needs to write that
|
|
||||||
# itself I suppose :(
|
|
||||||
# So:
|
|
||||||
# 1. Get it to write that file, and
|
|
||||||
# 2. Allow it to inherit profiles from configured ssh
|
|
||||||
{
|
|
||||||
self,
|
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
lib,
|
|
||||||
}: let
|
|
||||||
cfg = config.services.wishlist;
|
|
||||||
in {
|
|
||||||
options = {
|
|
||||||
services.wishlist = with lib; {
|
|
||||||
enable = mkEnableOption "wishlist";
|
|
||||||
|
|
||||||
name = mkOption {
|
|
||||||
type = types.str;
|
|
||||||
default =
|
|
||||||
};
|
|
||||||
|
|
||||||
port = mkOption {
|
|
||||||
type = types.port;
|
|
||||||
default = 2222;
|
|
||||||
description = "Port to listen on";
|
|
||||||
};
|
|
||||||
|
|
||||||
#configPath = mkOption {
|
|
||||||
# type = types.path;
|
|
||||||
# default = ;
|
|
||||||
# description = "Path to config file";
|
|
||||||
#};
|
|
||||||
|
|
||||||
package = mkOption {
|
|
||||||
type = types.package;
|
|
||||||
default = self.packages.${nixpkgs.system}.default;
|
|
||||||
description = "Package to use";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# define a systemd service for wishlist ^_^
|
|
||||||
config = lib.mkIf cfg.enable {
|
|
||||||
systemd.services.wishlist = {
|
|
||||||
description = "Single entrypoint for multiple SSH endpoints";
|
|
||||||
wantedBy = ["multi-user.target"];
|
|
||||||
|
|
||||||
serviceConfig = let
|
|
||||||
wishlistServiceConfig = pkgs.writeText "config.yaml" ''
|
|
||||||
hello world!
|
|
||||||
'';
|
|
||||||
in {
|
|
||||||
DynamicUser = "yes";
|
|
||||||
ExecStart = "${pkgs.wishlist}/bin/wishlist serve --config ${wishlistServiceConfig}";
|
|
||||||
Restart = "always";
|
|
||||||
RestartSec = "2s";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
packages = flake-utils.lib.eachSystem supportedSystems (
|
|
||||||
system: let
|
|
||||||
version = "0.15.1";
|
|
||||||
#pkgs = nixpkgs.legacyPackages.${system};
|
|
||||||
pkgs = import nixpkgs {
|
|
||||||
inherit system;
|
|
||||||
config.allowUnfree = false;
|
|
||||||
};
|
|
||||||
#lib = pkgs.lib;
|
|
||||||
in rec {
|
|
||||||
defaultPackage = self.packages.${system}.wishlist;
|
|
||||||
wishlist = pkgs.buildGoModule {
|
|
||||||
pname = "wishlist";
|
|
||||||
inherit version;
|
|
||||||
meta = with lib; {
|
|
||||||
description = "Single entrypoint for multiple SSH endpoints";
|
|
||||||
homepage = "https://github.com/charmbracelet/wishlist";
|
|
||||||
changelog = "https://github.com/charmbracelet/wishlist/releases/tag/v${version}";
|
|
||||||
license = licenses.mit;
|
|
||||||
maintainers = with maintainers; [caarlos0 penguwin];
|
|
||||||
mainProgram = "wishlist";
|
|
||||||
};
|
|
||||||
|
|
||||||
src = pkgs.fetchFromGitHub {
|
|
||||||
owner = "charmbracelet";
|
|
||||||
repo = "wishlist";
|
|
||||||
rev = "v${version}";
|
|
||||||
# rev = "d7f058e115a8b4a4131406d01dde84fb4a8e93c4";
|
|
||||||
hash = "53fojA+gdvpSVNjx6QncH16F8/x+lpY5SkNs7obW2XQ=";
|
|
||||||
};
|
|
||||||
vendorSha256 = "0x6rss3fwv2398wrd5kyzkrqaphzvh4ykwfqai9glxm01y6fhxz7";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
);
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
{pkgs, ...}: {
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
# flipper zero desktop app
|
|
||||||
qflipper
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-unstable,
|
upkgs,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
dotnetVersions = [8 9 10];
|
dotnetVersions = [8 9 10];
|
||||||
|
|
@ -50,9 +50,9 @@ in {
|
||||||
|
|
||||||
# Mono
|
# Mono
|
||||||
mono
|
mono
|
||||||
# NOTE: nixpkgs-unstable uses .NET8 SDK
|
# NOTE: nixupkgs uses .NET8 SDK
|
||||||
# WARNING: nixpkgs-25.05 uses .NET6 SDK (now marked insecure)
|
# WARNING: nixpkgs-25.05 uses .NET6 SDK (now marked insecure)
|
||||||
pkgs-unstable.msbuild
|
upkgs.msbuild
|
||||||
|
|
||||||
# .NET Framework Tools/Services
|
# .NET Framework Tools/Services
|
||||||
omnisharp-roslyn
|
omnisharp-roslyn
|
||||||
|
|
|
||||||
|
|
@ -1,72 +0,0 @@
|
||||||
{
|
|
||||||
description = "Wishlist: Your SSH directory."
|
|
||||||
|
|
||||||
inputs = {
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
outputs = {
|
|
||||||
self
|
|
||||||
}: let
|
|
||||||
nixosModule = {
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
options.services.wishlist = {
|
|
||||||
enable = lib.mkEnableOption "Your SSH directory.";
|
|
||||||
|
|
||||||
port = lib.mkOption {
|
|
||||||
type = lib.types.port;
|
|
||||||
default = 22;
|
|
||||||
description = "Port to listen on";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = lib.mkIf config.services.wishlist.enable {
|
|
||||||
# configure the systemd service
|
|
||||||
systemd.services.wishlist = {
|
|
||||||
description = "Your SSH directory.";
|
|
||||||
wantedBy = [ "multi-user.target" ];
|
|
||||||
after = [ "network.target" ];
|
|
||||||
serviceConfig = {
|
|
||||||
ExecStart = "${self.packages.${pkgs.system}.default}/bin/wishlist";
|
|
||||||
Restart = "always";
|
|
||||||
Type = "simple";
|
|
||||||
DynamicUser = "yes";
|
|
||||||
};
|
|
||||||
# environment variables
|
|
||||||
environment = {
|
|
||||||
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
in
|
|
||||||
(flake-utils.lib.eachDefaultSystem (system: let
|
|
||||||
gopkg = go-nixpkgs.legacyPackages.${system};
|
|
||||||
in {
|
|
||||||
packages.default = gopkg.buildGoModule ############################
|
|
||||||
}))
|
|
||||||
buildGoModule rec { # is rec necessary?
|
|
||||||
pname = "wishlist";
|
|
||||||
version = "0.15.1"
|
|
||||||
|
|
||||||
src = fetchFromGithub {
|
|
||||||
owner = "charmbracelet";
|
|
||||||
repo = "wishlist";
|
|
||||||
rev = "v${version}";
|
|
||||||
hash = "0c9g1s8j9znzd1mw61d0klc6sqri0wx6hljibxdwzi3cabfy3ld6";
|
|
||||||
};
|
|
||||||
|
|
||||||
vendorSha256 = lib.fakeSha256;
|
|
||||||
|
|
||||||
meta = with lib; {
|
|
||||||
homepage = "https://github.com/charmbracelet/wishlist";
|
|
||||||
description = "Your SSH directory.";
|
|
||||||
license = lib.licenses.mit;
|
|
||||||
maintainers = with lib.maintainers; [ caarlos0 ];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -1,22 +0,0 @@
|
||||||
{lib}: {
|
|
||||||
buildGoModule rec { # is rec necessary?
|
|
||||||
pname = "wishlist";
|
|
||||||
version = "0.15.1"
|
|
||||||
|
|
||||||
src = fetchFromGithub {
|
|
||||||
owner = "charmbracelet";
|
|
||||||
repo = "wishlist";
|
|
||||||
rev = "v${version}";
|
|
||||||
hash = "0c9g1s8j9znzd1mw61d0klc6sqri0wx6hljibxdwzi3cabfy3ld6";
|
|
||||||
};
|
|
||||||
|
|
||||||
vendorSha256 = lib.fakeSha256;
|
|
||||||
|
|
||||||
meta = with lib; {
|
|
||||||
homepage = "https://github.com/charmbracelet/wishlist";
|
|
||||||
description = "Your SSH directory.";
|
|
||||||
license = lib.licenses.mit;
|
|
||||||
maintainers = with lib.maintainers; [ caarlos0 ];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -1,117 +0,0 @@
|
||||||
{
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
cfg = config.programs.crywl;
|
|
||||||
in {
|
|
||||||
options.programs.crywl = with lib; {
|
|
||||||
enable = mkEnableOption "CryWL";
|
|
||||||
xwayland.enable = mkEnableOption "XWayland";
|
|
||||||
defaultSession = mkEnableOption "CryWL as the default login session";
|
|
||||||
|
|
||||||
# currently DWL 0.7 (also beware I'll barely ever update the original DWL refs)
|
|
||||||
useUnmodifiedDWL = mkOption {
|
|
||||||
type = types.bool;
|
|
||||||
default = false;
|
|
||||||
description = "Whether to use unmodified DWL source code (latest stable release)";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = lib.mkIf cfg.enable (let
|
|
||||||
xwaylandEnabled = cfg.xwayland.enable;
|
|
||||||
defaultSession = cfg.defaultSession;
|
|
||||||
useUnmodifiedDWL = cfg.useUnmodifiedDWL;
|
|
||||||
in {
|
|
||||||
services.displayManager = {
|
|
||||||
sessionPackages = [
|
|
||||||
pkgs.crywl
|
|
||||||
];
|
|
||||||
|
|
||||||
defaultSession = lib.mkIf defaultSession "crywl";
|
|
||||||
};
|
|
||||||
|
|
||||||
environment.systemPackages = [
|
|
||||||
pkgs.crywl
|
|
||||||
];
|
|
||||||
|
|
||||||
nixpkgs.overlays = [
|
|
||||||
(final: prev: {
|
|
||||||
crywl = prev.dwl.overrideAttrs (oldAttrs: rec {
|
|
||||||
pname = "crywl";
|
|
||||||
version = "0.1-unstable";
|
|
||||||
|
|
||||||
src = let
|
|
||||||
dwl_0_70 = {
|
|
||||||
rev = "74e45c4014ae7048ecbb76eb6f54034b8b479480";
|
|
||||||
hash = "sha256-7SoCITrbMrlfL4Z4hVyPpjB9RrrjLXHP9C5t1DVXBBA=";
|
|
||||||
};
|
|
||||||
crywl_unstable = {
|
|
||||||
rev = "dc1260d3cfd14e8e5b243ec1d3d56e4b08c8c517";
|
|
||||||
hash = "sha256-61R+xBYMzeEn93gLofcj8Y3VbJqW6g7GzCTujpAco90=";
|
|
||||||
};
|
|
||||||
in
|
|
||||||
pkgs.fetchFromGitea ({
|
|
||||||
domain = "forge.imbored.dev";
|
|
||||||
owner = "emileclarkb";
|
|
||||||
repo = pname;
|
|
||||||
}
|
|
||||||
// (
|
|
||||||
if useUnmodifiedDWL
|
|
||||||
then dwl_0_70
|
|
||||||
else crywl_unstable
|
|
||||||
));
|
|
||||||
|
|
||||||
buildInputs = with pkgs;
|
|
||||||
[
|
|
||||||
libinput
|
|
||||||
xorg.libxcb
|
|
||||||
libxkbcommon
|
|
||||||
pixman
|
|
||||||
wayland
|
|
||||||
wayland-protocols
|
|
||||||
wlroots_0_19
|
|
||||||
]
|
|
||||||
++ lib.optionals xwaylandEnabled [
|
|
||||||
xorg.libX11
|
|
||||||
xorg.xcbutilwm
|
|
||||||
xwayland
|
|
||||||
];
|
|
||||||
|
|
||||||
makeFlags =
|
|
||||||
[
|
|
||||||
"PKG_CONFIG=${pkgs.stdenv.cc.targetPrefix}pkg-config"
|
|
||||||
"WAYLAND_SCANNER=wayland-scanner"
|
|
||||||
"PREFIX=$(out)"
|
|
||||||
"MANDIR=$(man)/share/man"
|
|
||||||
]
|
|
||||||
++ lib.optionals xwaylandEnabled [
|
|
||||||
''XWAYLAND="-DXWAYLAND"''
|
|
||||||
''XLIBS="xcb xcb-icccm.pc"''
|
|
||||||
];
|
|
||||||
|
|
||||||
# Ensure `crywl.desktop` entry is registered
|
|
||||||
passthru = {
|
|
||||||
providedSessions = [pname];
|
|
||||||
|
|
||||||
tests.version = pkgs.testers.testVersion {
|
|
||||||
package = oldAttrs.finalPackage;
|
|
||||||
# `dwl -v` emits its version string to stderr and returns 1
|
|
||||||
command = "crywl -v 2>&1; return 0";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
meta = {
|
|
||||||
homepage = "https://forge.imbored.dev/emileclarkb/crywl";
|
|
||||||
description = "Personal fork of DWL";
|
|
||||||
license = lib.licenses.gpl3Only;
|
|
||||||
maintainers = [lib.maintainers.emileclarkb];
|
|
||||||
inherit (pkgs.wayland.meta) platforms;
|
|
||||||
mainProgram = "crywl";
|
|
||||||
};
|
|
||||||
});
|
|
||||||
})
|
|
||||||
];
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
{...}: {
|
|
||||||
programs = {
|
|
||||||
river.enable = true;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-unstable,
|
upkgs,
|
||||||
inputs,
|
inputs,
|
||||||
config,
|
config,
|
||||||
...
|
...
|
||||||
|
|
@ -230,7 +230,7 @@ in {
|
||||||
|
|
||||||
home-manager = {
|
home-manager = {
|
||||||
users.me = import ../../homes/me;
|
users.me = import ../../homes/me;
|
||||||
extraSpecialArgs = {inherit inputs pkgs pkgs-unstable;};
|
extraSpecialArgs = {inherit inputs pkgs upkgs;};
|
||||||
sharedModules = [];
|
sharedModules = [];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -379,7 +379,7 @@ in {
|
||||||
|
|
||||||
# Games
|
# Games
|
||||||
prismlauncher # minecraft
|
prismlauncher # minecraft
|
||||||
pkgs-unstable.olympus
|
upkgs.olympus
|
||||||
discord
|
discord
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,474 +0,0 @@
|
||||||
{
|
|
||||||
pkgs,
|
|
||||||
lib,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
# ChameleonUltraGUI requires flutter sdk >3.0.0
|
|
||||||
pkgs.flutter324.buildFlutterApplication
|
|
||||||
(self: {
|
|
||||||
pname = "ChameleonUltraGUI";
|
|
||||||
version = "1.1.2";
|
|
||||||
|
|
||||||
src = pkgs.fetchFromGitHub {
|
|
||||||
owner = "GameTec-live";
|
|
||||||
repo = "ChameleonUltraGUI";
|
|
||||||
sha256 = "1mb6wkqk6vaamrhflfhsgp5gvqiw2qkvmy7j65abcx7sn5990i27";
|
|
||||||
rev = "11424abaccb4a010fcbeab9799ae8f675d8afe99";
|
|
||||||
};
|
|
||||||
|
|
||||||
desktopItems = [
|
|
||||||
(pkgs.makeDesktopItem {
|
|
||||||
name = self.pname;
|
|
||||||
desktopName = "Chameleon Ultra GUI";
|
|
||||||
icon = self.pname;
|
|
||||||
comment = self.meta.description;
|
|
||||||
|
|
||||||
exec = "chameleonultragui";
|
|
||||||
terminal = false;
|
|
||||||
|
|
||||||
categories = [
|
|
||||||
"Utility"
|
|
||||||
];
|
|
||||||
})
|
|
||||||
];
|
|
||||||
|
|
||||||
# path to application within fetched sources
|
|
||||||
sourceRoot = "source/chameleonultragui";
|
|
||||||
|
|
||||||
buildInputs = [
|
|
||||||
pkgs.imagemagick # creating mipmaps for share/icons
|
|
||||||
pkgs.yj # converting pubspec.lock yaml->json
|
|
||||||
];
|
|
||||||
|
|
||||||
buildArguments = ["--release"];
|
|
||||||
|
|
||||||
# source files compile with Flutter >3.29.0 but this
|
|
||||||
# derivation uses 3.24.0 (so we patch for compatability)
|
|
||||||
postPatch = let
|
|
||||||
argbPatch = ''
|
|
||||||
--- general.dart.old 2025-05-11 15:59:51.812132078 +1000
|
|
||||||
+++ general.dart 2025-05-11 15:58:14.755856407 +1000
|
|
||||||
@@ -211,7 +211,7 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
String colorToHex(Color color) {
|
|
||||||
- return '#\''${color.toARGB32().toRadixString(16).padLeft(8, '0').substring(2)}';
|
|
||||||
+ return '#\''${color.value.toRadixString(16).padLeft(8, '0').substring(2)}';
|
|
||||||
}
|
|
||||||
|
|
||||||
Color hexToColor(String hex) {
|
|
||||||
'';
|
|
||||||
in ''
|
|
||||||
# patch source files using Color.toARGB32 method (not defined in Flutter 3.24)
|
|
||||||
argbPatch="${argbPatch}"
|
|
||||||
patch lib/helpers/general.dart <(echo "$argbPatch")
|
|
||||||
'';
|
|
||||||
|
|
||||||
# installPhase = ''
|
|
||||||
# runHook preInstall
|
|
||||||
|
|
||||||
# # create mipmaps of desktop logo
|
|
||||||
# logoOriginal="assets/logo-color-desktop.png"
|
|
||||||
# for i in 16 32 64 128 256 512; do
|
|
||||||
# res="$i"x"$i"
|
|
||||||
# logoOut="$out"/share/icons/hicolor/"$res"/apps
|
|
||||||
# mkdir -p $logoOut
|
|
||||||
# ${pkgs.imagemagick}/bin/magick $logoOriginal -resize $res $logoOut/${pname}.png
|
|
||||||
# done
|
|
||||||
|
|
||||||
# runHook postInstall
|
|
||||||
# '';
|
|
||||||
|
|
||||||
# Nix doesn't natively have a fromYAML function (so I made this instead)
|
|
||||||
pubspecLock = let
|
|
||||||
appRoot = "${self.src}/chameleonultragui";
|
|
||||||
|
|
||||||
# when generating patch files use -u flag and then
|
|
||||||
# make sure to escape all " characters for Nix string
|
|
||||||
pubspecLockPatch = ''
|
|
||||||
--- pubspec.lock.bak2025-05-10 15:42:44.287730979 +1000
|
|
||||||
+++ pubspec.lock2025-05-10 15:41:23.778480048 +1000
|
|
||||||
@@ -5,18 +5,23 @@
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: _fe_analyzer_shared
|
|
||||||
- sha256: dc27559385e905ad30838356c5f5d574014ba39872d732111cd07ac0beff4c57
|
|
||||||
+ sha256: f256b0c0ba6c7577c15e2e4e114755640a875e885099367bf6e012b19314c834
|
|
||||||
url: \"https://pub.dev\"
|
|
||||||
source: hosted
|
|
||||||
- version: \"80.0.0\"
|
|
||||||
+ version: \"72.0.0\"
|
|
||||||
+ _macros:
|
|
||||||
+ dependency: transitive
|
|
||||||
+ description: dart
|
|
||||||
+ source: sdk
|
|
||||||
+ version: \"0.3.2\"
|
|
||||||
analyzer:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: analyzer
|
|
||||||
- sha256: \"192d1c5b944e7e53b24b5586db760db934b177d4147c42fbca8c8c5f1eb8d11e\"
|
|
||||||
+ sha256: b652861553cd3990d8ed361f7979dc6d7053a9ac8843fa73820ab68ce5410139
|
|
||||||
url: \"https://pub.dev\"
|
|
||||||
source: hosted
|
|
||||||
- version: \"7.3.0\"
|
|
||||||
+ version: \"6.7.0\"
|
|
||||||
archive:
|
|
||||||
dependency: \"direct main\"
|
|
||||||
description:
|
|
||||||
@@ -37,26 +42,26 @@
|
|
||||||
dependency: \"direct main\"
|
|
||||||
description:
|
|
||||||
name: async
|
|
||||||
- sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63
|
|
||||||
+ sha256: \"947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c\"
|
|
||||||
url: \"https://pub.dev\"
|
|
||||||
source: hosted
|
|
||||||
- version: \"2.12.0\"
|
|
||||||
+ version: \"2.11.0\"
|
|
||||||
boolean_selector:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: boolean_selector
|
|
||||||
- sha256: \"8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea\"
|
|
||||||
+ sha256: \"6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66\"
|
|
||||||
url: \"https://pub.dev\"
|
|
||||||
source: hosted
|
|
||||||
- version: \"2.1.2\"
|
|
||||||
+ version: \"2.1.1\"
|
|
||||||
characters:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: characters
|
|
||||||
- sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803
|
|
||||||
+ sha256: \"04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605\"
|
|
||||||
url: \"https://pub.dev\"
|
|
||||||
source: hosted
|
|
||||||
- version: \"1.4.0\"
|
|
||||||
+ version: \"1.3.0\"
|
|
||||||
checked_yaml:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
@@ -77,18 +82,18 @@
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: clock
|
|
||||||
- sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
|
|
||||||
+ sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
|
|
||||||
url: \"https://pub.dev\"
|
|
||||||
source: hosted
|
|
||||||
- version: \"1.1.2\"
|
|
||||||
+ version: \"1.1.1\"
|
|
||||||
collection:
|
|
||||||
dependency: \"direct main\"
|
|
||||||
description:
|
|
||||||
name: collection
|
|
||||||
- sha256: \"2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76\"
|
|
||||||
+ sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
|
|
||||||
url: \"https://pub.dev\"
|
|
||||||
source: hosted
|
|
||||||
- version: \"1.19.1\"
|
|
||||||
+ version: \"1.18.0\"
|
|
||||||
convert:
|
|
||||||
dependency: \"direct main\"
|
|
||||||
description:
|
|
||||||
@@ -157,10 +162,10 @@
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: fake_async
|
|
||||||
- sha256: \"6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc\"
|
|
||||||
+ sha256: \"511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78\"
|
|
||||||
url: \"https://pub.dev\"
|
|
||||||
source: hosted
|
|
||||||
- version: \"1.3.2\"
|
|
||||||
+ version: \"1.3.1\"
|
|
||||||
ffi:
|
|
||||||
dependency: \"direct main\"
|
|
||||||
description:
|
|
||||||
@@ -196,11 +201,10 @@
|
|
||||||
file_saver:
|
|
||||||
dependency: \"direct main\"
|
|
||||||
description:
|
|
||||||
- path: \".\"
|
|
||||||
- ref: fix-windows
|
|
||||||
- resolved-ref: \"3038d74d5560dcca528423fffd745abf31eb88ae\"
|
|
||||||
- url: \"https://github.com/Foxushka/file_saver.git\"
|
|
||||||
- source: git
|
|
||||||
+ name: file_saver
|
|
||||||
+ sha256: \"017a127de686af2d2fbbd64afea97052d95f2a0f87d19d25b87e097407bf9c1e\"
|
|
||||||
+ url: \"https://pub.dev\"
|
|
||||||
+ source: hosted
|
|
||||||
version: \"0.2.14\"
|
|
||||||
fixnum:
|
|
||||||
dependency: transitive
|
|
||||||
@@ -234,11 +238,10 @@
|
|
||||||
flutter_libserialport:
|
|
||||||
dependency: \"direct main\"
|
|
||||||
description:
|
|
||||||
- path: \".\"
|
|
||||||
- ref: main
|
|
||||||
- resolved-ref: \"6740aae075505a220a98492910b090824efc7910\"
|
|
||||||
- url: \"https://github.com/NeariX67/flutter_libserialport.git\"
|
|
||||||
- source: git
|
|
||||||
+ name: flutter_libserialport
|
|
||||||
+ sha256: d193b5ac819db6540d20cc8d20d9f5ec9e3396edb4d2c4a23c97863fa9132336
|
|
||||||
+ url: \"https://pub.dev\"
|
|
||||||
+ source: hosted
|
|
||||||
version: \"0.5.0\"
|
|
||||||
flutter_lints:
|
|
||||||
dependency: \"direct dev\"
|
|
||||||
@@ -347,18 +350,18 @@
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: leak_tracker
|
|
||||||
- sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec
|
|
||||||
+ sha256: \"3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05\"
|
|
||||||
url: \"https://pub.dev\"
|
|
||||||
source: hosted
|
|
||||||
- version: \"10.0.8\"
|
|
||||||
+ version: \"10.0.5\"
|
|
||||||
leak_tracker_flutter_testing:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: leak_tracker_flutter_testing
|
|
||||||
- sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573
|
|
||||||
+ sha256: \"932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806\"
|
|
||||||
url: \"https://pub.dev\"
|
|
||||||
source: hosted
|
|
||||||
- version: \"3.0.9\"
|
|
||||||
+ version: \"3.0.5\"
|
|
||||||
leak_tracker_testing:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
@@ -399,14 +402,22 @@
|
|
||||||
url: \"https://pub.dev\"
|
|
||||||
source: hosted
|
|
||||||
version: \"1.3.0\"
|
|
||||||
+ macros:
|
|
||||||
+ dependency: transitive
|
|
||||||
+ description:
|
|
||||||
+ name: macros
|
|
||||||
+ sha256: \"0acaed5d6b7eab89f63350bccd82119e6c602df0f391260d0e32b5e23db79536\"
|
|
||||||
+ url: \"https://pub.dev\"
|
|
||||||
+ source: hosted
|
|
||||||
+ version: \"0.1.2-main.4\"
|
|
||||||
matcher:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: matcher
|
|
||||||
- sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2
|
|
||||||
+ sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
|
|
||||||
url: \"https://pub.dev\"
|
|
||||||
source: hosted
|
|
||||||
- version: \"0.12.17\"
|
|
||||||
+ version: \"0.12.16+1\"
|
|
||||||
material_color_utilities:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
@@ -419,10 +430,10 @@
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: meta
|
|
||||||
- sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
|
|
||||||
+ sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
|
|
||||||
url: \"https://pub.dev\"
|
|
||||||
source: hosted
|
|
||||||
- version: \"1.16.0\"
|
|
||||||
+ version: \"1.15.0\"
|
|
||||||
mobile_scanner:
|
|
||||||
dependency: \"direct main\"
|
|
||||||
description:
|
|
||||||
@@ -467,10 +478,10 @@
|
|
||||||
dependency: \"direct main\"
|
|
||||||
description:
|
|
||||||
name: path
|
|
||||||
- sha256: \"75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5\"
|
|
||||||
+ sha256: \"087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af\"
|
|
||||||
url: \"https://pub.dev\"
|
|
||||||
source: hosted
|
|
||||||
- version: \"1.9.1\"
|
|
||||||
+ version: \"1.9.0\"
|
|
||||||
path_provider:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
@@ -723,15 +734,15 @@
|
|
||||||
dependency: transitive
|
|
||||||
description: flutter
|
|
||||||
source: sdk
|
|
||||||
- version: \"0.0.0\"
|
|
||||||
+ version: \"0.0.99\"
|
|
||||||
source_span:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: source_span
|
|
||||||
- sha256: \"254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c\"
|
|
||||||
+ sha256: \"53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c\"
|
|
||||||
url: \"https://pub.dev\"
|
|
||||||
source: hosted
|
|
||||||
- version: \"1.10.1\"
|
|
||||||
+ version: \"1.10.0\"
|
|
||||||
sprintf:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
@@ -744,42 +755,42 @@
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: stack_trace
|
|
||||||
- sha256: \"8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1\"
|
|
||||||
+ sha256: \"73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b\"
|
|
||||||
url: \"https://pub.dev\"
|
|
||||||
source: hosted
|
|
||||||
- version: \"1.12.1\"
|
|
||||||
+ version: \"1.11.1\"
|
|
||||||
stream_channel:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: stream_channel
|
|
||||||
- sha256: \"969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d\"
|
|
||||||
+ sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
|
|
||||||
url: \"https://pub.dev\"
|
|
||||||
source: hosted
|
|
||||||
- version: \"2.1.4\"
|
|
||||||
+ version: \"2.1.2\"
|
|
||||||
string_scanner:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: string_scanner
|
|
||||||
- sha256: \"921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43\"
|
|
||||||
+ sha256: \"556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde\"
|
|
||||||
url: \"https://pub.dev\"
|
|
||||||
source: hosted
|
|
||||||
- version: \"1.4.1\"
|
|
||||||
+ version: \"1.2.0\"
|
|
||||||
term_glyph:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: term_glyph
|
|
||||||
- sha256: \"7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e\"
|
|
||||||
+ sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
|
|
||||||
url: \"https://pub.dev\"
|
|
||||||
source: hosted
|
|
||||||
- version: \"1.2.2\"
|
|
||||||
+ version: \"1.2.1\"
|
|
||||||
test_api:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: test_api
|
|
||||||
- sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd
|
|
||||||
+ sha256: \"5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb\"
|
|
||||||
url: \"https://pub.dev\"
|
|
||||||
source: hosted
|
|
||||||
- version: \"0.7.4\"
|
|
||||||
+ version: \"0.7.2\"
|
|
||||||
typed_data:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
@@ -855,12 +866,11 @@
|
|
||||||
usb_serial:
|
|
||||||
dependency: \"direct main\"
|
|
||||||
description:
|
|
||||||
- path: \".\"
|
|
||||||
- ref: fix-usbserial
|
|
||||||
- resolved-ref: \"9fcbacc92bec19ea02d33a40d9f39e45d19cf637\"
|
|
||||||
- url: \"https://github.com/Foxushka/usbserial.git\"
|
|
||||||
- source: git
|
|
||||||
- version: \"0.5.1\"
|
|
||||||
+ name: usb_serial
|
|
||||||
+ sha256: a605a600e34e7f28d4e80851ca3999ef747e42e406138887b8a88b8c382a8b07
|
|
||||||
+ url: \"https://pub.dev\"
|
|
||||||
+ source: hosted
|
|
||||||
+ version: \"0.5.2\"
|
|
||||||
uuid:
|
|
||||||
dependency: \"direct main\"
|
|
||||||
description:
|
|
||||||
@@ -881,10 +891,10 @@
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: vm_service
|
|
||||||
- sha256: \"0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14\"
|
|
||||||
+ sha256: \"5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d\"
|
|
||||||
url: \"https://pub.dev\"
|
|
||||||
source: hosted
|
|
||||||
- version: \"14.3.1\"
|
|
||||||
+ version: \"14.2.5\"
|
|
||||||
wakelock_plus:
|
|
||||||
dependency: \"direct main\"
|
|
||||||
description:
|
|
||||||
@@ -958,5 +968,5 @@
|
|
||||||
source: hosted
|
|
||||||
version: \"2.2.1\"
|
|
||||||
sdks:
|
|
||||||
- dart: \">=3.7.0-0 <4.0.0\"
|
|
||||||
+ dart: \">=3.5.0 <4.0.0\"
|
|
||||||
flutter: \">=3.24.0\"
|
|
||||||
'';
|
|
||||||
in
|
|
||||||
builtins.fromJSON
|
|
||||||
(
|
|
||||||
builtins.readFile (pkgs.runCommand "${self.pname}-buildenv" {
|
|
||||||
inputs = [
|
|
||||||
# DEBUG (both lines commented)
|
|
||||||
#pkgs.flutter324 # ChameleonUltraGUI requires sdk >3.0.0
|
|
||||||
#pkgs.yj
|
|
||||||
];
|
|
||||||
} ''
|
|
||||||
# copy source files to a temporary path to rebuild the lockfile
|
|
||||||
buildPath=$(mktemp -d)
|
|
||||||
cp -r "${appRoot}/." "$buildPath/"
|
|
||||||
|
|
||||||
outPubspecLock="$buildPath/pubspec.lock"
|
|
||||||
# MUST define variables to use multiline Nix string in bash scripting
|
|
||||||
pubspecLockPatch="${pubspecLockPatch}"
|
|
||||||
|
|
||||||
# apply the pubspec.yaml patch and regenerate lock file
|
|
||||||
# (create a temporary home directory for flutter to play in)
|
|
||||||
#(cd $buildPath && chmod -R +w . \
|
|
||||||
# && patch ./pubspec.yaml <(echo "$pubspecYamlPatch") \
|
|
||||||
# && export HOME=$(mktemp -d) \
|
|
||||||
# && flutter --disable-analytics \
|
|
||||||
# && flutter config --no-cli-animations \
|
|
||||||
# && ${pkgs.flutter}/bin/flutter pub get)
|
|
||||||
|
|
||||||
# patch the lockfile
|
|
||||||
chmod +w $outPubspecLock
|
|
||||||
patch $outPubspecLock <(echo "$pubspecLockPatch")
|
|
||||||
|
|
||||||
# convert new lockfile to json and return
|
|
||||||
${pkgs.yj}/bin/yj < "$buildPath/pubspec.lock" > $out
|
|
||||||
'')
|
|
||||||
);
|
|
||||||
|
|
||||||
# TODO: try this instead of patching
|
|
||||||
# gitHashes = {
|
|
||||||
# dartssh2 = "sha256-2pypKwurziwGLZYuGaxlS2lzN3UvJp3bRTvvYYxEqRI=";
|
|
||||||
# hotkey_manager_linux = "sha256-aO0h94YZvgV/ggVupNw8GjyZsnXrq3qTHRDtuhNv3oI=";
|
|
||||||
# system_info2 = "sha256-fly7E2vG+bQ/+QGzXk+DYba73RZccltdW2LpZGDKX60=";
|
|
||||||
# tray_menu = "sha256-riiAiBEms+9ARog8i+MR1fto1Yqx+gwbBWyNbNq6VTM=";
|
|
||||||
# window_size = "sha256-71PqQzf+qY23hTJvcm0Oye8tng3Asr42E2vfF1nBmVA=";
|
|
||||||
# xterm = "sha256-h8vIonTPUVnNqZPk/A4ZV7EYCMyM0rrErL9ZOMe4ZBE=";
|
|
||||||
# };
|
|
||||||
|
|
||||||
meta = with lib; {
|
|
||||||
description = "A GUI for the Chameleon Ultra written in Flutter for crossplatform";
|
|
||||||
homepage = "https://github.com/GameTec-live/ChameleonUltraGUI";
|
|
||||||
license = licenses.gpl3;
|
|
||||||
maintainers = [maintainers.emileclarkb];
|
|
||||||
platforms = platforms.linux;
|
|
||||||
};
|
|
||||||
})
|
|
||||||
.overrideAttrs (
|
|
||||||
previousAttrs: {
|
|
||||||
installPhase =
|
|
||||||
previousAttrs.installPhase
|
|
||||||
+ ''
|
|
||||||
# create mipmaps of desktop logo
|
|
||||||
logoOriginal="assets/logo-color-desktop.png"
|
|
||||||
for i in 16 32 64 128 256 512; do
|
|
||||||
res="$i"x"$i"
|
|
||||||
logoOut="$out"/share/icons/hicolor/"$res"/apps
|
|
||||||
mkdir -p $logoOut
|
|
||||||
${pkgs.imagemagick}/bin/magick $logoOriginal -resize $res $logoOut/${previousAttrs.pname}.png
|
|
||||||
done
|
|
||||||
'';
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
||||||
**Tundra** is the name I'm giving my *desktop environment.*
|
|
||||||
Made primarily with Aylur's Astal library and the Vala
|
|
||||||
programming language (as an excuse to learn it).
|
|
||||||
|
|
||||||
NOTE: Tundra is designed specifically to work on Hyprland,
|
|
||||||
I have no idea how it'll interact with other window managers :)
|
|
||||||
|
|
||||||
|
|
||||||
##### Meson Notes (temporary)
|
|
||||||
Setup meson like `meson setup <BUILD-DIR> <SRC-DIR>` ie `meson setup build src`.
|
|
||||||
Compile meson like `meson compile -C <BUILD-DIR>` where <BUILD-DIR> is the relative path to it,
|
|
||||||
if you're in it already just use `meson compile` otherwise if in project root use `meson compile build`.
|
|
||||||
62
hosts/packages/tundra/flake.lock
generated
62
hosts/packages/tundra/flake.lock
generated
|
|
@ -1,62 +0,0 @@
|
||||||
{
|
|
||||||
"nodes": {
|
|
||||||
"astal": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": "nixpkgs"
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1745934282,
|
|
||||||
"narHash": "sha256-hgUd4yUYALHzzoEi/88BnsgrxZIqk+zyQVoI3CL61IU=",
|
|
||||||
"owner": "aylur",
|
|
||||||
"repo": "astal",
|
|
||||||
"rev": "07583deff8a486fad472718572c3248f0fbea1f3",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "aylur",
|
|
||||||
"repo": "astal",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixpkgs": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1737469691,
|
|
||||||
"narHash": "sha256-nmKOgAU48S41dTPIXAq0AHZSehWUn6ZPrUKijHAMmIk=",
|
|
||||||
"owner": "nixos",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"rev": "9e4d5190a9482a1fb9d18adf0bdb83c6e506eaab",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nixos",
|
|
||||||
"ref": "nixos-unstable",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixpkgs_2": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1746663147,
|
|
||||||
"narHash": "sha256-Ua0drDHawlzNqJnclTJGf87dBmaO/tn7iZ+TCkTRpRc=",
|
|
||||||
"owner": "nixos",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"rev": "dda3dcd3fe03e991015e9a74b22d35950f264a54",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nixos",
|
|
||||||
"ref": "nixos-unstable",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"root": {
|
|
||||||
"inputs": {
|
|
||||||
"astal": "astal",
|
|
||||||
"nixpkgs": "nixpkgs_2"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"root": "root",
|
|
||||||
"version": 7
|
|
||||||
}
|
|
||||||
|
|
@ -1,42 +0,0 @@
|
||||||
{
|
|
||||||
inputs = {
|
|
||||||
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
|
|
||||||
astal.url = "github:aylur/astal";
|
|
||||||
};
|
|
||||||
|
|
||||||
outputs = {
|
|
||||||
self,
|
|
||||||
nixpkgs,
|
|
||||||
astal,
|
|
||||||
}: let
|
|
||||||
system = "x86_64-linux";
|
|
||||||
pkgs = nixpkgs.legacyPackages.${system};
|
|
||||||
in {
|
|
||||||
packages.${system} = {
|
|
||||||
default = pkgs.stdenv.mkDerivation {
|
|
||||||
name = "tundra";
|
|
||||||
src = ./.;
|
|
||||||
|
|
||||||
nativeBuildInputs = with pkgs; [
|
|
||||||
meson
|
|
||||||
ninja
|
|
||||||
pkg-config
|
|
||||||
vala
|
|
||||||
gobject-introspection
|
|
||||||
dart-sass
|
|
||||||
];
|
|
||||||
|
|
||||||
buildInputs = [
|
|
||||||
astal.packages.${system}.io
|
|
||||||
astal.packages.${system}.astal3
|
|
||||||
astal.packages.${system}.battery
|
|
||||||
astal.packages.${system}.wireplumber
|
|
||||||
astal.packages.${system}.network
|
|
||||||
astal.packages.${system}.tray
|
|
||||||
astal.packages.${system}.mpris
|
|
||||||
astal.packages.${system}.hyprland
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -1,31 +0,0 @@
|
||||||
class App : Astal.Application {
|
|
||||||
public static App instance;
|
|
||||||
|
|
||||||
public override void request (string msg, SocketConnection conn) {
|
|
||||||
print(@"$msg\n");
|
|
||||||
AstalIO.write_sock.begin(conn, "ok");
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void activate () {
|
|
||||||
foreach (var mon in this.monitors)
|
|
||||||
add_window(new Bar(mon));
|
|
||||||
|
|
||||||
apply_css("@STYLE@");
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void main(string[] args) {
|
|
||||||
var instance_name = "vala";
|
|
||||||
|
|
||||||
App.instance = new App() {
|
|
||||||
instance_name = instance_name
|
|
||||||
};
|
|
||||||
|
|
||||||
try {
|
|
||||||
App.instance.acquire_socket();
|
|
||||||
App.instance.run(null);
|
|
||||||
} catch (Error err) {
|
|
||||||
print(AstalIO.send_request(instance_name, string.joinv(" ", args)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -1,47 +0,0 @@
|
||||||
project('tundra', 'vala', 'c')
|
|
||||||
|
|
||||||
bindir = get_option('prefix') / get_option('bindir')
|
|
||||||
# bindir = './bin'
|
|
||||||
libdir = get_option('prefix') / get_option('libdir')
|
|
||||||
|
|
||||||
pkgconfig_deps = [
|
|
||||||
dependency('glib-2.0'),
|
|
||||||
dependency('gobject-2.0'),
|
|
||||||
dependency('gtk+-3.0'),
|
|
||||||
dependency('libnm'),
|
|
||||||
dependency('astal-io-0.1'),
|
|
||||||
dependency('astal-3.0'),
|
|
||||||
dependency('astal-battery-0.1'),
|
|
||||||
dependency('astal-wireplumber-0.1'),
|
|
||||||
dependency('astal-network-0.1'),
|
|
||||||
dependency('astal-tray-0.1'),
|
|
||||||
dependency('astal-mpris-0.1'),
|
|
||||||
dependency('astal-hyprland-0.1'),
|
|
||||||
]
|
|
||||||
|
|
||||||
# needed for GLib.Math
|
|
||||||
deps = pkgconfig_deps + meson.get_compiler('c').find_library('m')
|
|
||||||
|
|
||||||
main = configure_file(
|
|
||||||
input: 'app.in.vala',
|
|
||||||
output: 'app.vala',
|
|
||||||
configuration: {
|
|
||||||
'STYLE': run_command(
|
|
||||||
find_program('sass'),
|
|
||||||
meson.project_source_root() / 'style.scss',
|
|
||||||
).stdout(),
|
|
||||||
},
|
|
||||||
)
|
|
||||||
|
|
||||||
sources = files(
|
|
||||||
'widget/Bar.vala',
|
|
||||||
)
|
|
||||||
|
|
||||||
executable(
|
|
||||||
'tundra',
|
|
||||||
[sources, main],
|
|
||||||
dependencies: deps,
|
|
||||||
install: true,
|
|
||||||
install_dir: bindir,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
@ -1,107 +0,0 @@
|
||||||
@use "sass:color";
|
|
||||||
|
|
||||||
$bg: #212223;
|
|
||||||
$fg: #f1f1f1;
|
|
||||||
$accent: #378DF7;
|
|
||||||
$radius: 7px;
|
|
||||||
|
|
||||||
window.Bar {
|
|
||||||
border: none;
|
|
||||||
box-shadow: none;
|
|
||||||
background-color: $bg;
|
|
||||||
color: $fg;
|
|
||||||
font-size: 1.1em;
|
|
||||||
font-weight: bold;
|
|
||||||
|
|
||||||
label {
|
|
||||||
margin: 0 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.Workspaces {
|
|
||||||
button {
|
|
||||||
all: unset;
|
|
||||||
background-color: transparent;
|
|
||||||
|
|
||||||
&:hover label {
|
|
||||||
background-color: color.adjust($fg, $alpha: -0.84);
|
|
||||||
border-color: color.adjust($accent, $alpha: -0.8);
|
|
||||||
}
|
|
||||||
|
|
||||||
&:active label {
|
|
||||||
background-color: color.adjust($fg, $alpha: -0.8)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
label {
|
|
||||||
transition: 200ms;
|
|
||||||
padding: 0 8px;
|
|
||||||
margin: 2px;
|
|
||||||
border-radius: $radius;
|
|
||||||
border: 1pt solid transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
.focused label {
|
|
||||||
color: $accent;
|
|
||||||
border-color: $accent;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.SysTray {
|
|
||||||
margin-right: 8px;
|
|
||||||
|
|
||||||
button {
|
|
||||||
padding: 0 4px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.FocusedClient {
|
|
||||||
color: $accent;
|
|
||||||
}
|
|
||||||
|
|
||||||
.Media .Cover {
|
|
||||||
min-height: 1.2em;
|
|
||||||
min-width: 1.2em;
|
|
||||||
border-radius: $radius;
|
|
||||||
background-position: center;
|
|
||||||
background-size: contain;
|
|
||||||
}
|
|
||||||
|
|
||||||
.Battery label {
|
|
||||||
padding-left: 0;
|
|
||||||
margin-left: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.AudioSlider {
|
|
||||||
* {
|
|
||||||
all: unset;
|
|
||||||
}
|
|
||||||
|
|
||||||
icon {
|
|
||||||
margin-right: .6em;
|
|
||||||
}
|
|
||||||
|
|
||||||
& {
|
|
||||||
margin: 0 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
trough {
|
|
||||||
background-color: color.adjust($fg, $alpha: -0.8);
|
|
||||||
border-radius: $radius;
|
|
||||||
}
|
|
||||||
|
|
||||||
highlight {
|
|
||||||
background-color: $accent;
|
|
||||||
min-height: .8em;
|
|
||||||
border-radius: $radius;
|
|
||||||
}
|
|
||||||
|
|
||||||
slider {
|
|
||||||
background-color: $fg;
|
|
||||||
border-radius: $radius;
|
|
||||||
min-height: 1em;
|
|
||||||
min-width: 1em;
|
|
||||||
margin: -.2em;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -1,265 +0,0 @@
|
||||||
class Workspaces : Gtk.Box {
|
|
||||||
AstalHyprland.Hyprland hypr = AstalHyprland.get_default();
|
|
||||||
public Workspaces() {
|
|
||||||
Astal.widget_set_class_names(this, {"Workspaces"});
|
|
||||||
hypr.notify["workspaces"].connect(sync);
|
|
||||||
sync();
|
|
||||||
}
|
|
||||||
|
|
||||||
void sync() {
|
|
||||||
foreach (var child in get_children())
|
|
||||||
child.destroy();
|
|
||||||
|
|
||||||
// TODO: create a copy of workspaces
|
|
||||||
// then create a list of tuples (map id to index in hypr.workspaces)
|
|
||||||
// then sort new list by id
|
|
||||||
// then iterate and use index on hypr.workspaces
|
|
||||||
// NEVERMIND: read `lib/hyprland/hyprland.vala` and see how the
|
|
||||||
// `_workspaces` property is defined as a HashTable
|
|
||||||
// basically just extend on that / create a wrapper
|
|
||||||
// that allows better organisation
|
|
||||||
|
|
||||||
hypr.workspaces.sort((a, b) => { return a.id - b.id; });
|
|
||||||
foreach (var ws in hypr.workspaces) {
|
|
||||||
// filter out special workspaces
|
|
||||||
if (!(ws.id >= -99 && ws.id <= -2)) {
|
|
||||||
add(button(ws));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Gtk.Button button(AstalHyprland.Workspace ws) {
|
|
||||||
var btn = new Gtk.Button() {
|
|
||||||
visible = true,
|
|
||||||
label = ws.id.to_string()
|
|
||||||
};
|
|
||||||
|
|
||||||
hypr.notify["focused-workspace"].connect(() => {
|
|
||||||
var focused = hypr.focused_workspace == ws;
|
|
||||||
if (focused) {
|
|
||||||
Astal.widget_set_class_names(btn, {"focused"});
|
|
||||||
} else {
|
|
||||||
Astal.widget_set_class_names(btn, {});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
btn.clicked.connect(ws.focus);
|
|
||||||
return btn;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class FocusedClient : Gtk.Box {
|
|
||||||
public FocusedClient() {
|
|
||||||
Astal.widget_set_class_names(this, {"Focused"});
|
|
||||||
AstalHyprland.get_default().notify["focused-client"].connect(sync);
|
|
||||||
sync();
|
|
||||||
}
|
|
||||||
|
|
||||||
void sync() {
|
|
||||||
foreach (var child in get_children())
|
|
||||||
child.destroy();
|
|
||||||
|
|
||||||
var client = AstalHyprland.get_default().focused_client;
|
|
||||||
if (client == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
var label = new Gtk.Label(client.title) { visible = true };
|
|
||||||
client.bind_property("title", label, "label", BindingFlags.SYNC_CREATE);
|
|
||||||
add(label);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class Media : Gtk.Box {
|
|
||||||
AstalMpris.Mpris mpris = AstalMpris.get_default();
|
|
||||||
|
|
||||||
public Media() {
|
|
||||||
Astal.widget_set_class_names(this, {"Media"});
|
|
||||||
mpris.notify["players"].connect(sync);
|
|
||||||
sync();
|
|
||||||
}
|
|
||||||
|
|
||||||
void sync() {
|
|
||||||
foreach (var child in get_children())
|
|
||||||
child.destroy();
|
|
||||||
|
|
||||||
if (mpris.players.length() == 0) {
|
|
||||||
add(new Gtk.Label("Nothing Playing"));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var player = mpris.players.nth_data(0);
|
|
||||||
var label = new Gtk.Label(null);
|
|
||||||
var cover = new Gtk.Box(Gtk.Orientation.HORIZONTAL, 0) {
|
|
||||||
valign = Gtk.Align.CENTER
|
|
||||||
};
|
|
||||||
|
|
||||||
Astal.widget_set_class_names(cover, {"Cover"});
|
|
||||||
player.bind_property("metadata", label, "label", BindingFlags.SYNC_CREATE, (_, src, ref trgt) => {
|
|
||||||
var title = player.title;
|
|
||||||
var artist = player.artist;
|
|
||||||
trgt.set_string(@"$artist - $title");
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
|
|
||||||
var id = player.notify["cover-art"].connect(() => {
|
|
||||||
var art = player.cover_art;
|
|
||||||
Astal.widget_set_css(cover, @"background-image: url('$art')");
|
|
||||||
});
|
|
||||||
|
|
||||||
cover.destroy.connect(() => player.disconnect(id));
|
|
||||||
add(cover);
|
|
||||||
add(label);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class SysTray : Gtk.Box {
|
|
||||||
HashTable<string, Gtk.Widget> items = new HashTable<string, Gtk.Widget>(str_hash, str_equal);
|
|
||||||
AstalTray.Tray tray = AstalTray.get_default();
|
|
||||||
|
|
||||||
public SysTray() {
|
|
||||||
Astal.widget_set_class_names(this, { "SysTray" });
|
|
||||||
tray.item_added.connect(add_item);
|
|
||||||
tray.item_removed.connect(remove_item);
|
|
||||||
}
|
|
||||||
|
|
||||||
void add_item(string id) {
|
|
||||||
if (items.contains(id))
|
|
||||||
return;
|
|
||||||
|
|
||||||
var item = tray.get_item(id);
|
|
||||||
var btn = new Gtk.MenuButton() { use_popover = false, visible = true };
|
|
||||||
var icon = new Astal.Icon() { visible = true };
|
|
||||||
|
|
||||||
item.bind_property("tooltip-markup", btn, "tooltip-markup", BindingFlags.SYNC_CREATE);
|
|
||||||
item.bind_property("gicon", icon, "gicon", BindingFlags.SYNC_CREATE);
|
|
||||||
item.bind_property("menu-model", btn, "menu-model", BindingFlags.SYNC_CREATE);
|
|
||||||
btn.insert_action_group("dbusmenu", item.action_group);
|
|
||||||
item.notify["action-group"].connect(() => {
|
|
||||||
btn.insert_action_group("dbusmenu", item.action_group);
|
|
||||||
});
|
|
||||||
|
|
||||||
btn.add(icon);
|
|
||||||
add(btn);
|
|
||||||
items.set(id, btn);
|
|
||||||
}
|
|
||||||
|
|
||||||
void remove_item(string id) {
|
|
||||||
if (items.contains(id)) {
|
|
||||||
items.remove(id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class Wifi : Astal.Icon {
|
|
||||||
public Wifi() {
|
|
||||||
Astal.widget_set_class_names(this, {"Wifi"});
|
|
||||||
var wifi = AstalNetwork.get_default().wifi;
|
|
||||||
// var wifi = AstalNetwork.get_default().get_wifi();
|
|
||||||
if (wifi != null) {
|
|
||||||
wifi.bind_property("ssid", this, "tooltip-text", BindingFlags.SYNC_CREATE);
|
|
||||||
wifi.bind_property("icon-name", this, "icon", BindingFlags.SYNC_CREATE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class AudioSlider : Gtk.Box {
|
|
||||||
Astal.Icon icon = new Astal.Icon();
|
|
||||||
Astal.Slider slider = new Astal.Slider() { hexpand = true };
|
|
||||||
|
|
||||||
public AudioSlider() {
|
|
||||||
add(icon);
|
|
||||||
add(slider);
|
|
||||||
Astal.widget_set_class_names(this, {"AudioSlider"});
|
|
||||||
Astal.widget_set_css(this, "min-width: 140px");
|
|
||||||
|
|
||||||
var speaker = AstalWp.get_default().audio.default_speaker;
|
|
||||||
speaker.bind_property("volume-icon", icon, "icon", BindingFlags.SYNC_CREATE);
|
|
||||||
speaker.bind_property("volume", slider, "value", BindingFlags.SYNC_CREATE);
|
|
||||||
slider.dragged.connect(() => speaker.volume = slider.value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class Battery : Gtk.Box {
|
|
||||||
Astal.Icon icon = new Astal.Icon();
|
|
||||||
Astal.Label label = new Astal.Label();
|
|
||||||
|
|
||||||
public Battery() {
|
|
||||||
add(icon);
|
|
||||||
add(label);
|
|
||||||
Astal.widget_set_class_names(this, {"Battery"});
|
|
||||||
|
|
||||||
var bat = AstalBattery.get_default();
|
|
||||||
bat.bind_property("is-present", this, "visible", BindingFlags.SYNC_CREATE);
|
|
||||||
bat.bind_property("battery-icon-name", icon, "icon", BindingFlags.SYNC_CREATE);
|
|
||||||
bat.bind_property("percentage", label, "label", BindingFlags.SYNC_CREATE, (_, src, ref trgt) => {
|
|
||||||
var p = Math.floor(src.get_double() * 100);
|
|
||||||
trgt.set_string(@"$p%");
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class Time : Astal.Label {
|
|
||||||
string format;
|
|
||||||
AstalIO.Time interval;
|
|
||||||
|
|
||||||
void sync() {
|
|
||||||
label = new DateTime.now_local().format(format);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Time(string format = "%H:%M - %A %e.") {
|
|
||||||
this.format = format;
|
|
||||||
interval = AstalIO.Time.interval(1000, null);
|
|
||||||
interval.now.connect(sync);
|
|
||||||
destroy.connect(interval.cancel);
|
|
||||||
Astal.widget_set_class_names(this, {"Time"});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class Left : Gtk.Box {
|
|
||||||
public Left() {
|
|
||||||
Object(hexpand: true, halign: Gtk.Align.START);
|
|
||||||
add(new Workspaces());
|
|
||||||
add(new FocusedClient());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class Center : Gtk.Box {
|
|
||||||
public Center() {
|
|
||||||
add(new Media());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class Right : Gtk.Box {
|
|
||||||
public Right() {
|
|
||||||
Object(hexpand: true, halign: Gtk.Align.END);
|
|
||||||
add(new SysTray());
|
|
||||||
add(new Wifi());
|
|
||||||
add(new AudioSlider());
|
|
||||||
add(new Battery());
|
|
||||||
add(new Time());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class Bar : Astal.Window {
|
|
||||||
public Bar(Gdk.Monitor monitor) {
|
|
||||||
Object(
|
|
||||||
anchor: Astal.WindowAnchor.TOP
|
|
||||||
| Astal.WindowAnchor.LEFT
|
|
||||||
| Astal.WindowAnchor.RIGHT,
|
|
||||||
exclusivity: Astal.Exclusivity.EXCLUSIVE,
|
|
||||||
gdkmonitor: monitor
|
|
||||||
);
|
|
||||||
|
|
||||||
Astal.widget_set_class_names(this, {"Bar"});
|
|
||||||
|
|
||||||
add(new Astal.CenterBox() {
|
|
||||||
start_widget = new Left(),
|
|
||||||
center_widget = new Center(),
|
|
||||||
end_widget = new Right(),
|
|
||||||
});
|
|
||||||
|
|
||||||
show_all();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -1,10 +1,17 @@
|
||||||
{upkgs, ...}: {
|
[
|
||||||
nixpkgs.overlays = [
|
(self: super: {
|
||||||
(self: super: {
|
angry-oxide = import ../packages/angryoxide {
|
||||||
ekphos = import ../packages/ekphos.nix {
|
pkgs = super;
|
||||||
inherit upkgs;
|
inherit
|
||||||
pkgs = super;
|
(super)
|
||||||
};
|
lib
|
||||||
})
|
;
|
||||||
];
|
};
|
||||||
}
|
ekphos = import ../packages/ekphos {
|
||||||
|
pkgs = super;
|
||||||
|
};
|
||||||
|
x86-manpages = import ../packages/x86-manpages {
|
||||||
|
pkgs = super;
|
||||||
|
};
|
||||||
|
})
|
||||||
|
]
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,10 @@
|
||||||
{
|
{pkgs, ...}: let
|
||||||
pkgs,
|
|
||||||
upkgs,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
inherit
|
inherit
|
||||||
(pkgs)
|
(pkgs)
|
||||||
lib
|
lib
|
||||||
;
|
;
|
||||||
in
|
in
|
||||||
upkgs.rustPackages.rustPlatform.buildRustPackage {
|
pkgs.rustPackages.rustPlatform.buildRustPackage {
|
||||||
pname = "ekphos";
|
pname = "ekphos";
|
||||||
version = "v0.20.10";
|
version = "v0.20.10";
|
||||||
src = pkgs.fetchFromGitHub {
|
src = pkgs.fetchFromGitHub {
|
||||||
Loading…
Add table
Add a link
Reference in a new issue