Compare commits
No commits in common. "a2192c9341590d82d9647b9abd1989d068967b43" and "14193c05fbd4878b78f3670d99ae96723ce3d388" have entirely different histories.
a2192c9341
...
14193c05fb
39 changed files with 1724 additions and 235 deletions
200
flake.lock
generated
200
flake.lock
generated
|
|
@ -1,48 +1,29 @@
|
||||||
{
|
{
|
||||||
"nodes": {
|
"nodes": {
|
||||||
"cerulean": {
|
"colmena": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"deploy-rs": "deploy-rs",
|
"flake-compat": "flake-compat",
|
||||||
"mix": "mix",
|
"flake-utils": "flake-utils",
|
||||||
"nib": "nib",
|
"nix-github-actions": "nix-github-actions",
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"nixpkgs"
|
|
||||||
],
|
|
||||||
"nixpkgs-unstable": [
|
|
||||||
"nixpkgs-unstable"
|
"nixpkgs-unstable"
|
||||||
],
|
],
|
||||||
"systems": [
|
"stable": [
|
||||||
"systems"
|
"nixpkgs"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1770552327,
|
"lastModified": 1734374287,
|
||||||
"narHash": "sha256-cVVPdC650MRP4tMSB9EcECUpc0U4HWSZzoQnpEHH0uE=",
|
"narHash": "sha256-rINodqeUuezuCWOnpJgrH7u9vJ86fYT+Dj8Mu8T/IBc=",
|
||||||
"path": "/home/me/agribit/nexus/Cerulean",
|
"owner": "zhaofengli",
|
||||||
"type": "path"
|
"repo": "colmena",
|
||||||
},
|
"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": "serokell",
|
"owner": "zhaofengli",
|
||||||
"repo": "deploy-rs",
|
"repo": "colmena",
|
||||||
|
"rev": "47b6414d800c8471e98ca072bc0835345741a56a",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -75,11 +56,11 @@
|
||||||
"flake-compat": {
|
"flake-compat": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1733328505,
|
"lastModified": 1650374568,
|
||||||
"narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=",
|
"narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=",
|
||||||
"owner": "edolstra",
|
"owner": "edolstra",
|
||||||
"repo": "flake-compat",
|
"repo": "flake-compat",
|
||||||
"rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec",
|
"rev": "b4a34015c698c7793d592d66adbab377907a2be8",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -120,6 +101,25 @@
|
||||||
"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,48 +140,6 @@
|
||||||
"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,
|
||||||
|
|
@ -198,6 +156,27 @@
|
||||||
"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",
|
||||||
|
|
@ -222,16 +201,16 @@
|
||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1743014863,
|
"lastModified": 1770536720,
|
||||||
"narHash": "sha256-jAIUqsiN2r3hCuHji80U7NNEafpIMBXiwKlSrjWMlpg=",
|
"narHash": "sha256-pbmbaQUuoG+v37b91lqcNcz05YUvVif7iWjIx9lF8R4=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "bd3bac8bfb542dbde7ffffb6987a1a1f9d41699f",
|
"rev": "3c64ab24b22579c833895b6030c9563837e41a70",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "NixOS",
|
"owner": "nixos",
|
||||||
"ref": "nixpkgs-unstable",
|
"ref": "nixos-25.05",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
|
|
@ -267,32 +246,16 @@
|
||||||
"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": {
|
||||||
"cerulean": "cerulean",
|
"colmena": "colmena",
|
||||||
"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_2",
|
"nixpkgs": "nixpkgs",
|
||||||
"nixpkgs-unstable": "nixpkgs-unstable",
|
"nixpkgs-unstable": "nixpkgs-unstable",
|
||||||
"systems": "systems_2"
|
"systems": "systems"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"systems": {
|
"systems": {
|
||||||
|
|
@ -309,39 +272,6 @@
|
||||||
"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",
|
||||||
|
|
|
||||||
123
flake.nix
123
flake.nix
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
description = "im gonna cry again ;-;";
|
description = "Emile's Nix Dotfiles";
|
||||||
|
|
||||||
inputs = {
|
inputs = {
|
||||||
systems.url = "github:nix-systems/default";
|
systems.url = "github:nix-systems/default";
|
||||||
|
|
@ -7,18 +7,12 @@
|
||||||
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";
|
||||||
|
|
||||||
home-manager = {
|
colmena = {
|
||||||
url = "github:nix-community/home-manager/release-25.05";
|
url = "github:zhaofengli/colmena/?rev=47b6414d800c8471e98ca072bc0835345741a56a";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
|
|
||||||
cerulean = {
|
|
||||||
# url = "github:emilelcb/Cerulean";
|
|
||||||
url = "/home/me/agribit/nexus/Cerulean";
|
|
||||||
inputs = {
|
inputs = {
|
||||||
systems.follows = "systems";
|
nixpkgs.follows = "nixpkgs-unstable";
|
||||||
nixpkgs.follows = "nixpkgs";
|
stable.follows = "nixpkgs";
|
||||||
nixpkgs-unstable.follows = "nixpkgs-unstable";
|
flake-utils.inputs.systems.follows = "systems";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -44,63 +38,84 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = {
|
outputs = {
|
||||||
cerulean,
|
self,
|
||||||
home-manager,
|
nixpkgs,
|
||||||
|
nixpkgs-unstable,
|
||||||
grub2-themes,
|
grub2-themes,
|
||||||
|
colmena,
|
||||||
...
|
...
|
||||||
}: let
|
} @ inputs: let
|
||||||
groups = {
|
|
||||||
cryde = {}; # oh frick i cried again
|
|
||||||
server = {};
|
|
||||||
};
|
|
||||||
in
|
|
||||||
cerulean.mkNexus ./. {
|
|
||||||
nexus = {
|
|
||||||
inherit groups;
|
|
||||||
overlays = import ./overlays;
|
|
||||||
|
|
||||||
nodes = {
|
|
||||||
# my laptop <3 :3
|
|
||||||
lolcathost = {
|
|
||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
groups = [groups.cryde];
|
|
||||||
extraModules = [
|
pkgs = import nixpkgs {
|
||||||
home-manager.nixosModules.default
|
inherit system;
|
||||||
|
config = {
|
||||||
|
allowUnfree = false; # sanity check
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
pkgs-unstable = import nixpkgs-unstable {
|
||||||
|
inherit system;
|
||||||
|
config = {
|
||||||
|
# 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
|
grub2-themes.nixosModules.default
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
# i be on my puter frfr
|
# my laptop 0w0
|
||||||
myputer = {
|
lolcathost = nixpkgs.lib.nixosSystem {
|
||||||
system = "x86_64-linux";
|
inherit specialArgs;
|
||||||
groups = [groups.cryde];
|
|
||||||
extraModules = [
|
modules = [
|
||||||
home-manager.nixosModules.default
|
./hosts/lolcathost
|
||||||
grub2-themes.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
|
# remote deployment to my servers!!
|
||||||
hyrule = {
|
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";
|
||||||
groups = [groups.server];
|
config.allowUnfree = false;
|
||||||
deploy.ssh.host = "hyrule.dobutterfliescry.net";
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
# call me a statistician the way she spreads in my sheets
|
# meine vps
|
||||||
matcha = {
|
hyrule = import ./hosts/hyrule;
|
||||||
system = "x86_64-linux";
|
|
||||||
groups = [groups.server];
|
|
||||||
deploy.ssh.host = "bedroom.dobutterfliescry.net";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
lib,
|
lib,
|
||||||
config,
|
config,
|
||||||
pkgs,
|
pkgs,
|
||||||
upkgs,
|
pkgs-unstable,
|
||||||
...
|
...
|
||||||
} @ args: {
|
} @ args: {
|
||||||
imports = [
|
imports = [
|
||||||
|
|
@ -16,9 +16,12 @@
|
||||||
../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,
|
||||||
upkgs,
|
pkgs-unstable,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
lsps = {
|
lsps = {
|
||||||
|
|
@ -43,7 +43,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
ty = {
|
ty = {
|
||||||
pkg = upkgs.ty;
|
pkg = pkgs-unstable.ty;
|
||||||
cmd = "ty";
|
cmd = "ty";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
{upkgs, ...}: {
|
{pkgs-unstable, ...}: {
|
||||||
programs.foot = {
|
programs.foot = {
|
||||||
enable = true;
|
enable = true;
|
||||||
package = upkgs.foot;
|
package = pkgs-unstable.foot;
|
||||||
|
|
||||||
server.enable = true;
|
server.enable = true;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
upkgs,
|
pkgs-unstable,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
home-manager = builtins.fetchTarball {
|
home-manager = builtins.fetchTarball {
|
||||||
|
|
@ -40,6 +40,17 @@ 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,
|
||||||
upkgs,
|
pkgs-unstable,
|
||||||
...
|
...
|
||||||
}: {
|
}: {
|
||||||
services.minecraft-server = {
|
services.minecraft-server = {
|
||||||
enable = true;
|
enable = true;
|
||||||
package = upkgs.minecraft-server; # use latest version only!
|
package = pkgs-unstable.minecraft-server; # use latest version only!
|
||||||
declarative = true;
|
declarative = true;
|
||||||
|
|
||||||
eula = true;
|
eula = true;
|
||||||
|
|
|
||||||
|
|
@ -1,20 +1,37 @@
|
||||||
{
|
{
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
upkgs,
|
pkgs-unstable,
|
||||||
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 = [
|
||||||
|
|
@ -24,6 +41,7 @@
|
||||||
];
|
];
|
||||||
|
|
||||||
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
|
||||||
|
|
@ -35,6 +53,18 @@
|
||||||
|
|
||||||
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;
|
||||||
|
|
@ -207,7 +237,7 @@
|
||||||
|
|
||||||
home-manager = {
|
home-manager = {
|
||||||
users.me = import ../../homes/me;
|
users.me = import ../../homes/me;
|
||||||
extraSpecialArgs = {inherit inputs pkgs upkgs;};
|
extraSpecialArgs = {inherit inputs pkgs pkgs-unstable;};
|
||||||
sharedModules = [];
|
sharedModules = [];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -228,6 +258,7 @@
|
||||||
# ---- SYSTEM PACKAGES -----
|
# ---- SYSTEM PACKAGES -----
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
# User Environment
|
# User Environment
|
||||||
|
# crywl
|
||||||
swww
|
swww
|
||||||
helvum
|
helvum
|
||||||
easyeffects
|
easyeffects
|
||||||
|
|
@ -266,7 +297,7 @@
|
||||||
hexyl
|
hexyl
|
||||||
# ASM
|
# ASM
|
||||||
nasm
|
nasm
|
||||||
# x86-manpages # WARNING: cerulean doesn't allow overlays bruh
|
(callPackage ../packages/x86-manpages {})
|
||||||
# C Family
|
# C Family
|
||||||
gcc
|
gcc
|
||||||
clang
|
clang
|
||||||
|
|
@ -292,7 +323,7 @@
|
||||||
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
|
||||||
|
|
@ -358,13 +389,20 @@
|
||||||
|
|
||||||
# Games
|
# Games
|
||||||
prismlauncher # minecraft
|
prismlauncher # minecraft
|
||||||
upkgs.olympus # celeste
|
pkgs-unstable.olympus # celeste
|
||||||
discord
|
discord
|
||||||
discordo
|
discordo
|
||||||
# ekphos # WARNING: cerulean doesnt allow overlays yet
|
ekphos
|
||||||
];
|
];
|
||||||
|
|
||||||
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;
|
||||||
|
|
|
||||||
5
hosts/modules/angryoxide.nix
Normal file
5
hosts/modules/angryoxide.nix
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
{pkgs, ...}: {
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
(callPackage ../packages/angryoxide {})
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
upkgs,
|
pkgs-unstable,
|
||||||
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)
|
||||||
upkgs.jetbrains.rider
|
pkgs-unstable.jetbrains.rider
|
||||||
|
|
||||||
# NOTE: Blazor requires a Chromium-based browser
|
# NOTE: Blazor requires a Chromium-based browser
|
||||||
chromium
|
chromium
|
||||||
|
|
|
||||||
5
hosts/modules/chameleonultragui.nix
Normal file
5
hosts/modules/chameleonultragui.nix
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
{pkgs, ...}: {
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
(callPackage ../packages/chameleonultragui {})
|
||||||
|
];
|
||||||
|
}
|
||||||
31
hosts/modules/flakes/wishlist/README
Normal file
31
hosts/modules/flakes/wishlist/README
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
#### 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
|
||||||
93
hosts/modules/flakes/wishlist/flake.nix
Normal file
93
hosts/modules/flakes/wishlist/flake.nix
Normal file
|
|
@ -0,0 +1,93 @@
|
||||||
|
{
|
||||||
|
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";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
};
|
||||||
|
}
|
||||||
99
hosts/modules/flakes/wishlist/wishlist.nix
Normal file
99
hosts/modules/flakes/wishlist/wishlist.nix
Normal file
|
|
@ -0,0 +1,99 @@
|
||||||
|
# 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";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
*/
|
||||||
|
}
|
||||||
6
hosts/modules/flipperzero.nix
Normal file
6
hosts/modules/flipperzero.nix
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
{pkgs, ...}: {
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
# flipper zero desktop app
|
||||||
|
qflipper
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
upkgs,
|
pkgs-unstable,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
dotnetVersions = [8 9 10];
|
dotnetVersions = [8 9 10];
|
||||||
|
|
@ -50,9 +50,9 @@ in {
|
||||||
|
|
||||||
# Mono
|
# Mono
|
||||||
mono
|
mono
|
||||||
# NOTE: nixupkgs uses .NET8 SDK
|
# NOTE: nixpkgs-unstable uses .NET8 SDK
|
||||||
# WARNING: nixpkgs-25.05 uses .NET6 SDK (now marked insecure)
|
# WARNING: nixpkgs-25.05 uses .NET6 SDK (now marked insecure)
|
||||||
upkgs.msbuild
|
pkgs-unstable.msbuild
|
||||||
|
|
||||||
# .NET Framework Tools/Services
|
# .NET Framework Tools/Services
|
||||||
omnisharp-roslyn
|
omnisharp-roslyn
|
||||||
|
|
|
||||||
72
hosts/modules/wishlist.nix
Normal file
72
hosts/modules/wishlist.nix
Normal file
|
|
@ -0,0 +1,72 @@
|
||||||
|
{
|
||||||
|
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 ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
22
hosts/modules/wishlist.nix.bak
Normal file
22
hosts/modules/wishlist.nix.bak
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
{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 ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
117
hosts/modules/wm/crywl.nix
Normal file
117
hosts/modules/wm/crywl.nix
Normal file
|
|
@ -0,0 +1,117 @@
|
||||||
|
{
|
||||||
|
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";
|
||||||
|
};
|
||||||
|
});
|
||||||
|
})
|
||||||
|
];
|
||||||
|
});
|
||||||
|
}
|
||||||
5
hosts/modules/wm/river.nix
Normal file
5
hosts/modules/wm/river.nix
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
{...}: {
|
||||||
|
programs = {
|
||||||
|
river.enable = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
upkgs,
|
pkgs-unstable,
|
||||||
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 upkgs;};
|
extraSpecialArgs = {inherit inputs pkgs pkgs-unstable;};
|
||||||
sharedModules = [];
|
sharedModules = [];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -379,7 +379,7 @@ in {
|
||||||
|
|
||||||
# Games
|
# Games
|
||||||
prismlauncher # minecraft
|
prismlauncher # minecraft
|
||||||
upkgs.olympus
|
pkgs-unstable.olympus
|
||||||
discord
|
discord
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
|
||||||
474
hosts/packages/chameleonultragui/default.nix.bak1
Normal file
474
hosts/packages/chameleonultragui/default.nix.bak1
Normal file
|
|
@ -0,0 +1,474 @@
|
||||||
|
{
|
||||||
|
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
|
||||||
|
'';
|
||||||
|
}
|
||||||
|
)
|
||||||
12
hosts/packages/tundra/README
Normal file
12
hosts/packages/tundra/README
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
**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
Normal file
62
hosts/packages/tundra/flake.lock
generated
Normal file
|
|
@ -0,0 +1,62 @@
|
||||||
|
{
|
||||||
|
"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
|
||||||
|
}
|
||||||
42
hosts/packages/tundra/flake.nix
Normal file
42
hosts/packages/tundra/flake.nix
Normal file
|
|
@ -0,0 +1,42 @@
|
||||||
|
{
|
||||||
|
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
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
31
hosts/packages/tundra/src/app.in.vala
Normal file
31
hosts/packages/tundra/src/app.in.vala
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
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)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
47
hosts/packages/tundra/src/meson.build
Normal file
47
hosts/packages/tundra/src/meson.build
Normal file
|
|
@ -0,0 +1,47 @@
|
||||||
|
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,
|
||||||
|
)
|
||||||
|
|
||||||
107
hosts/packages/tundra/src/style.scss
Normal file
107
hosts/packages/tundra/src/style.scss
Normal file
|
|
@ -0,0 +1,107 @@
|
||||||
|
@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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
265
hosts/packages/tundra/src/widget/Bar.vala
Normal file
265
hosts/packages/tundra/src/widget/Bar.vala
Normal file
|
|
@ -0,0 +1,265 @@
|
||||||
|
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,17 +1,10 @@
|
||||||
[
|
{upkgs, ...}: {
|
||||||
|
nixpkgs.overlays = [
|
||||||
(self: super: {
|
(self: super: {
|
||||||
angry-oxide = import ../packages/angryoxide {
|
ekphos = import ../packages/ekphos.nix {
|
||||||
pkgs = super;
|
inherit upkgs;
|
||||||
inherit
|
|
||||||
(super)
|
|
||||||
lib
|
|
||||||
;
|
|
||||||
};
|
|
||||||
ekphos = import ../packages/ekphos {
|
|
||||||
pkgs = super;
|
|
||||||
};
|
|
||||||
x86-manpages = import ../packages/x86-manpages {
|
|
||||||
pkgs = super;
|
pkgs = super;
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
]
|
];
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,14 @@
|
||||||
{pkgs, ...}: let
|
{
|
||||||
|
pkgs,
|
||||||
|
upkgs,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
inherit
|
inherit
|
||||||
(pkgs)
|
(pkgs)
|
||||||
lib
|
lib
|
||||||
;
|
;
|
||||||
in
|
in
|
||||||
pkgs.rustPackages.rustPlatform.buildRustPackage {
|
upkgs.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