Compare commits
3 Commits
748584c78e
...
install_fi
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
504f8ecf09 | ||
|
|
7254bc8c7c | ||
|
|
a32f6bf0d1 |
@@ -8,7 +8,6 @@
|
|||||||
lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
|
lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
|
||||||
bh = log --oneline --branches=* --remotes=* --graph --decorate
|
bh = log --oneline --branches=* --remotes=* --graph --decorate
|
||||||
amend = commit --amend --no-edit
|
amend = commit --amend --no-edit
|
||||||
authorcount = shortlog --summary --numbered --all --no-merges
|
|
||||||
[core]
|
[core]
|
||||||
excludesfile = ~/.gitignore_global
|
excludesfile = ~/.gitignore_global
|
||||||
[commit]
|
[commit]
|
||||||
|
|||||||
@@ -8,7 +8,6 @@
|
|||||||
lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
|
lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
|
||||||
bh = log --oneline --branches=* --remotes=* --graph --decorate
|
bh = log --oneline --branches=* --remotes=* --graph --decorate
|
||||||
amend = commit --amend --no-edit
|
amend = commit --amend --no-edit
|
||||||
authorcount = shortlog --summary --numbered --all --no-merges
|
|
||||||
[core]
|
[core]
|
||||||
excludesfile = ~/.gitignore_global
|
excludesfile = ~/.gitignore_global
|
||||||
[commit]
|
[commit]
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
config,
|
config,
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
|
home-manager,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
|
|
||||||
@@ -15,7 +16,6 @@
|
|||||||
./roles/boot
|
./roles/boot
|
||||||
./roles/chromecast
|
./roles/chromecast
|
||||||
./roles/chromium
|
./roles/chromium
|
||||||
./roles/direnv
|
|
||||||
./roles/distributed_build
|
./roles/distributed_build
|
||||||
./roles/docker
|
./roles/docker
|
||||||
./roles/ecc
|
./roles/ecc
|
||||||
@@ -52,7 +52,6 @@
|
|||||||
./roles/reset
|
./roles/reset
|
||||||
./roles/rpcs3
|
./roles/rpcs3
|
||||||
./roles/rust
|
./roles/rust
|
||||||
./roles/shadps4
|
|
||||||
./roles/shikane
|
./roles/shikane
|
||||||
./roles/shipwright
|
./roles/shipwright
|
||||||
./roles/sm64ex
|
./roles/sm64ex
|
||||||
@@ -77,6 +76,10 @@
|
|||||||
./util/unfree_polyfill
|
./util/unfree_polyfill
|
||||||
];
|
];
|
||||||
|
|
||||||
|
me.install.user.talexander.file."/home/talexander/flake.nix" = {
|
||||||
|
source = ./flake.nix;
|
||||||
|
};
|
||||||
|
|
||||||
nix.settings.experimental-features = [
|
nix.settings.experimental-features = [
|
||||||
"nix-command"
|
"nix-command"
|
||||||
"flakes"
|
"flakes"
|
||||||
@@ -122,14 +125,27 @@
|
|||||||
];
|
];
|
||||||
};
|
};
|
||||||
users.groups.talexander.gid = 11235;
|
users.groups.talexander.gid = 11235;
|
||||||
|
home-manager.users.talexander =
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
# The state version is required and should stay at the version you
|
||||||
|
# originally installed.
|
||||||
|
home.stateVersion = "24.11";
|
||||||
|
};
|
||||||
|
|
||||||
|
home-manager.users.root =
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
# The state version is required and should stay at the version you
|
||||||
|
# originally installed.
|
||||||
|
home.stateVersion = "24.11";
|
||||||
|
};
|
||||||
|
|
||||||
# Automatic garbage collection
|
# Automatic garbage collection
|
||||||
nix.gc = lib.mkIf (!config.me.buildingIso) {
|
nix.gc = lib.mkIf (!config.me.buildingIso) {
|
||||||
# Runs nix-collect-garbage --delete-older-than 5d
|
# Runs nix-collect-garbage --delete-older-than 5d
|
||||||
automatic = true;
|
automatic = true;
|
||||||
persistent = true;
|
randomizedDelaySec = "14m";
|
||||||
dates = "monthly";
|
|
||||||
# randomizedDelaySec = "14m";
|
|
||||||
options = "--delete-older-than 30d";
|
options = "--delete-older-than 30d";
|
||||||
};
|
};
|
||||||
nix.settings.auto-optimise-store = !config.me.buildingIso;
|
nix.settings.auto-optimise-store = !config.me.buildingIso;
|
||||||
@@ -158,7 +174,7 @@
|
|||||||
pciutils # for lspci
|
pciutils # for lspci
|
||||||
ripgrep
|
ripgrep
|
||||||
strace
|
strace
|
||||||
# ltrace # Disabled because it uses more than 48GB of /tmp space during test phase.
|
ltrace
|
||||||
trace-cmd # ftrace
|
trace-cmd # ftrace
|
||||||
tcpdump
|
tcpdump
|
||||||
git-crypt
|
git-crypt
|
||||||
|
|||||||
69
nix/configuration/flake.lock
generated
69
nix/configuration/flake.lock
generated
@@ -39,11 +39,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1750903843,
|
"lastModified": 1746729224,
|
||||||
"narHash": "sha256-Ng9+f0H5/dW+mq/XOKvB9uwvGbsuiiO6HrPdAcVglCs=",
|
"narHash": "sha256-9R4sOLAK1w3Bq54H3XOJogdc7a6C2bLLmatOQ+5pf5w=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "disko",
|
"repo": "disko",
|
||||||
"rev": "83c4da299c1d7d300f8c6fd3a72ac46cb0d59aae",
|
"rev": "85555d27ded84604ad6657ecca255a03fd878607",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -147,6 +147,26 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"home-manager": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1746981801,
|
||||||
|
"narHash": "sha256-+Bfr0KqZV6gZdA7e2kupeoawozaLIHLuiPtC54uxbFc=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "home-manager",
|
||||||
|
"rev": "ff915842e4a2e63c4c8c5c08c6870b9d5b3c3ee9",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "home-manager",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"impermanence": {
|
"impermanence": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1737831083,
|
"lastModified": 1737831083,
|
||||||
@@ -189,22 +209,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
|
||||||
"lastModified": 1751271578,
|
|
||||||
"narHash": "sha256-P/SQmKDu06x8yv7i0s8bvnnuJYkxVGBWLWHaU+tt4YY=",
|
|
||||||
"owner": "NixOS",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"rev": "3016b4b15d13f3089db8a41ef937b13a9e33a8df",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "NixOS",
|
|
||||||
"ref": "nixos-unstable",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixpkgs-dda3dcd3f": {
|
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1746663147,
|
"lastModified": 1746663147,
|
||||||
"narHash": "sha256-Ua0drDHawlzNqJnclTJGf87dBmaO/tn7iZ+TCkTRpRc=",
|
"narHash": "sha256-Ua0drDHawlzNqJnclTJGf87dBmaO/tn7iZ+TCkTRpRc=",
|
||||||
@@ -215,8 +219,24 @@
|
|||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "dda3dcd3fe03e991015e9a74b22d35950f264a54",
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs-b93b4e9b5": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1713721570,
|
||||||
|
"narHash": "sha256-R0s+O5UjTePQRb72XPgtkTmEiOOW8n+1q9Gxt/OJnKU=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "b93b4e9b527904aadf52dba6ca35efde2067cbd4",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "b93b4e9b527904aadf52dba6ca35efde2067cbd4",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -238,11 +258,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs-unoptimized": {
|
"nixpkgs-unoptimized": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1751271578,
|
"lastModified": 1746663147,
|
||||||
"narHash": "sha256-P/SQmKDu06x8yv7i0s8bvnnuJYkxVGBWLWHaU+tt4YY=",
|
"narHash": "sha256-Ua0drDHawlzNqJnclTJGf87dBmaO/tn7iZ+TCkTRpRc=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "3016b4b15d13f3089db8a41ef937b13a9e33a8df",
|
"rev": "dda3dcd3fe03e991015e9a74b22d35950f264a54",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -283,10 +303,11 @@
|
|||||||
"inputs": {
|
"inputs": {
|
||||||
"ansible-sshjail": "ansible-sshjail",
|
"ansible-sshjail": "ansible-sshjail",
|
||||||
"disko": "disko",
|
"disko": "disko",
|
||||||
|
"home-manager": "home-manager",
|
||||||
"impermanence": "impermanence",
|
"impermanence": "impermanence",
|
||||||
"lanzaboote": "lanzaboote",
|
"lanzaboote": "lanzaboote",
|
||||||
"nixpkgs": "nixpkgs",
|
"nixpkgs": "nixpkgs",
|
||||||
"nixpkgs-dda3dcd3f": "nixpkgs-dda3dcd3f",
|
"nixpkgs-b93b4e9b5": "nixpkgs-b93b4e9b5",
|
||||||
"nixpkgs-unoptimized": "nixpkgs-unoptimized",
|
"nixpkgs-unoptimized": "nixpkgs-unoptimized",
|
||||||
"zsh-histdb": "zsh-histdb"
|
"zsh-histdb": "zsh-histdb"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,8 +43,10 @@
|
|||||||
inputs = {
|
inputs = {
|
||||||
impermanence.url = "github:nix-community/impermanence";
|
impermanence.url = "github:nix-community/impermanence";
|
||||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||||
nixpkgs-dda3dcd3f.url = "github:NixOS/nixpkgs/dda3dcd3fe03e991015e9a74b22d35950f264a54";
|
nixpkgs-b93b4e9b5.url = "github:NixOS/nixpkgs/b93b4e9b527904aadf52dba6ca35efde2067cbd4";
|
||||||
nixpkgs-unoptimized.url = "github:NixOS/nixpkgs/nixos-unstable";
|
nixpkgs-unoptimized.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||||
|
home-manager.url = "github:nix-community/home-manager";
|
||||||
|
home-manager.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
lanzaboote = {
|
lanzaboote = {
|
||||||
url = "github:nix-community/lanzaboote/v0.4.2";
|
url = "github:nix-community/lanzaboote/v0.4.2";
|
||||||
|
|
||||||
@@ -74,8 +76,9 @@
|
|||||||
self,
|
self,
|
||||||
nixpkgs,
|
nixpkgs,
|
||||||
nixpkgs-unoptimized,
|
nixpkgs-unoptimized,
|
||||||
nixpkgs-dda3dcd3f,
|
nixpkgs-b93b4e9b5,
|
||||||
impermanence,
|
impermanence,
|
||||||
|
home-manager,
|
||||||
lanzaboote,
|
lanzaboote,
|
||||||
zsh-histdb,
|
zsh-histdb,
|
||||||
ansible-sshjail,
|
ansible-sshjail,
|
||||||
@@ -85,7 +88,7 @@
|
|||||||
base_x86_64_linux = rec {
|
base_x86_64_linux = rec {
|
||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
specialArgs = {
|
specialArgs = {
|
||||||
pkgs-dda3dcd3f = import nixpkgs-dda3dcd3f {
|
pkgs-b93b4e9b5 = import nixpkgs-b93b4e9b5 {
|
||||||
inherit system;
|
inherit system;
|
||||||
};
|
};
|
||||||
pkgs-unoptimized = import nixpkgs-unoptimized {
|
pkgs-unoptimized = import nixpkgs-unoptimized {
|
||||||
@@ -96,8 +99,13 @@
|
|||||||
};
|
};
|
||||||
modules = [
|
modules = [
|
||||||
impermanence.nixosModules.impermanence
|
impermanence.nixosModules.impermanence
|
||||||
|
home-manager.nixosModules.home-manager
|
||||||
lanzaboote.nixosModules.lanzaboote
|
lanzaboote.nixosModules.lanzaboote
|
||||||
inputs.disko.nixosModules.disko
|
inputs.disko.nixosModules.disko
|
||||||
|
{
|
||||||
|
home-manager.useGlobalPkgs = true;
|
||||||
|
home-manager.useUserPackages = true;
|
||||||
|
}
|
||||||
{
|
{
|
||||||
nixpkgs.overlays = [
|
nixpkgs.overlays = [
|
||||||
zsh-histdb.overlays.default
|
zsh-histdb.overlays.default
|
||||||
|
|||||||
@@ -64,7 +64,6 @@
|
|||||||
me.bluetooth.enable = true;
|
me.bluetooth.enable = true;
|
||||||
me.chromecast.enable = true;
|
me.chromecast.enable = true;
|
||||||
me.chromium.enable = true;
|
me.chromium.enable = true;
|
||||||
me.direnv.enable = true;
|
|
||||||
me.docker.enable = true;
|
me.docker.enable = true;
|
||||||
me.ecc.enable = true;
|
me.ecc.enable = true;
|
||||||
me.emacs_flavor = "full";
|
me.emacs_flavor = "full";
|
||||||
@@ -89,7 +88,6 @@
|
|||||||
me.qemu.enable = true;
|
me.qemu.enable = true;
|
||||||
me.rpcs3.enable = true;
|
me.rpcs3.enable = true;
|
||||||
me.rust.enable = true;
|
me.rust.enable = true;
|
||||||
me.shadps4.enable = true;
|
|
||||||
me.shikane.enable = true;
|
me.shikane.enable = true;
|
||||||
me.sops.enable = true;
|
me.sops.enable = true;
|
||||||
me.sound.enable = true;
|
me.sound.enable = true;
|
||||||
|
|||||||
@@ -47,22 +47,6 @@
|
|||||||
"w- /sys/devices/system/cpu/cpufreq/policy13/energy_performance_preference - - - - power"
|
"w- /sys/devices/system/cpu/cpufreq/policy13/energy_performance_preference - - - - power"
|
||||||
"w- /sys/devices/system/cpu/cpufreq/policy14/energy_performance_preference - - - - power"
|
"w- /sys/devices/system/cpu/cpufreq/policy14/energy_performance_preference - - - - power"
|
||||||
"w- /sys/devices/system/cpu/cpufreq/policy15/energy_performance_preference - - - - power"
|
"w- /sys/devices/system/cpu/cpufreq/policy15/energy_performance_preference - - - - power"
|
||||||
"w- /sys/devices/system/cpu/cpu0/cpufreq/boost - - - - 0"
|
|
||||||
"w- /sys/devices/system/cpu/cpu1/cpufreq/boost - - - - 0"
|
|
||||||
"w- /sys/devices/system/cpu/cpu2/cpufreq/boost - - - - 0"
|
|
||||||
"w- /sys/devices/system/cpu/cpu3/cpufreq/boost - - - - 0"
|
|
||||||
"w- /sys/devices/system/cpu/cpu4/cpufreq/boost - - - - 0"
|
|
||||||
"w- /sys/devices/system/cpu/cpu5/cpufreq/boost - - - - 0"
|
|
||||||
"w- /sys/devices/system/cpu/cpu6/cpufreq/boost - - - - 0"
|
|
||||||
"w- /sys/devices/system/cpu/cpu7/cpufreq/boost - - - - 0"
|
|
||||||
"w- /sys/devices/system/cpu/cpu8/cpufreq/boost - - - - 0"
|
|
||||||
"w- /sys/devices/system/cpu/cpu9/cpufreq/boost - - - - 0"
|
|
||||||
"w- /sys/devices/system/cpu/cpu10/cpufreq/boost - - - - 0"
|
|
||||||
"w- /sys/devices/system/cpu/cpu11/cpufreq/boost - - - - 0"
|
|
||||||
"w- /sys/devices/system/cpu/cpu12/cpufreq/boost - - - - 0"
|
|
||||||
"w- /sys/devices/system/cpu/cpu13/cpufreq/boost - - - - 0"
|
|
||||||
"w- /sys/devices/system/cpu/cpu14/cpufreq/boost - - - - 0"
|
|
||||||
"w- /sys/devices/system/cpu/cpu15/cpufreq/boost - - - - 0"
|
|
||||||
];
|
];
|
||||||
|
|
||||||
boot.extraModprobeConfig = ''
|
boot.extraModprobeConfig = ''
|
||||||
|
|||||||
@@ -59,7 +59,6 @@
|
|||||||
me.bluetooth.enable = true;
|
me.bluetooth.enable = true;
|
||||||
me.chromecast.enable = true;
|
me.chromecast.enable = true;
|
||||||
me.chromium.enable = true;
|
me.chromium.enable = true;
|
||||||
me.direnv.enable = true;
|
|
||||||
me.docker.enable = true;
|
me.docker.enable = true;
|
||||||
me.ecc.enable = true;
|
me.ecc.enable = true;
|
||||||
me.emacs_flavor = "full";
|
me.emacs_flavor = "full";
|
||||||
@@ -85,7 +84,6 @@
|
|||||||
me.qemu.enable = true;
|
me.qemu.enable = true;
|
||||||
me.rpcs3.enable = true;
|
me.rpcs3.enable = true;
|
||||||
me.rust.enable = true;
|
me.rust.enable = true;
|
||||||
me.shadps4.enable = true;
|
|
||||||
me.shikane.enable = true;
|
me.shikane.enable = true;
|
||||||
me.sops.enable = true;
|
me.sops.enable = true;
|
||||||
me.sound.enable = true;
|
me.sound.enable = true;
|
||||||
|
|||||||
@@ -24,11 +24,13 @@
|
|||||||
xdg-utils # for xdg-open
|
xdg-utils # for xdg-open
|
||||||
];
|
];
|
||||||
|
|
||||||
me.install.user.talexander.file = {
|
home-manager.users.talexander =
|
||||||
".config/alacritty/alacritty.toml" = {
|
{ pkgs, ... }:
|
||||||
source = ./files/alacritty.toml;
|
{
|
||||||
|
home.file.".config/alacritty/alacritty.toml" = {
|
||||||
|
source = ./files/alacritty.toml;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
|
||||||
})
|
})
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
{ }
|
{ }
|
||||||
(lib.mkIf config.me.graphical {
|
(lib.mkIf config.me.graphical {
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
chromium
|
(chromium.override { enableWideVine = true; })
|
||||||
];
|
];
|
||||||
allowedUnfree = [
|
allowedUnfree = [
|
||||||
"chromium"
|
"chromium"
|
||||||
@@ -57,18 +57,8 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
nixpkgs.overlays = [
|
# Enabling vulkan causes video to render as white
|
||||||
(final: prev: {
|
# nixpkgs.config.chromium.commandLineArgs = "--enable-features=Vulkan";
|
||||||
chromium = prev.chromium.override {
|
|
||||||
enableWideVine = true;
|
|
||||||
commandLineArgs = [
|
|
||||||
"--enable-features=VaapiVideoDecoder,VaapiIgnoreDriverChecks,Vulkan,DefaultANGLEVulkan,VulkanFromANGLE,AcceleratedVideoEncoder"
|
|
||||||
# Enabling vulkan causes video to render as white
|
|
||||||
# "--enable-features=Vulkan";
|
|
||||||
];
|
|
||||||
};
|
|
||||||
})
|
|
||||||
];
|
|
||||||
})
|
})
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,55 +0,0 @@
|
|||||||
{
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
|
|
||||||
let
|
|
||||||
direnv_zsh_hook = pkgs.writeTextFile {
|
|
||||||
name = "direnv_zsh_hook.zsh";
|
|
||||||
text = ''
|
|
||||||
eval "$(direnv hook zsh)"
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
in
|
|
||||||
{
|
|
||||||
imports = [ ];
|
|
||||||
|
|
||||||
options.me = {
|
|
||||||
direnv.enable = lib.mkOption {
|
|
||||||
type = lib.types.bool;
|
|
||||||
default = false;
|
|
||||||
example = true;
|
|
||||||
description = "Whether we want to install direnv.";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = lib.mkIf config.me.direnv.enable (
|
|
||||||
lib.mkMerge [
|
|
||||||
{
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
direnv
|
|
||||||
nix-direnv
|
|
||||||
];
|
|
||||||
|
|
||||||
me.zsh.includes = [ direnv_zsh_hook ];
|
|
||||||
|
|
||||||
environment.persistence."/persist" = lib.mkIf (!config.me.buildingIso) {
|
|
||||||
hideMounts = true;
|
|
||||||
users.talexander = {
|
|
||||||
directories = [
|
|
||||||
{
|
|
||||||
# List of allowed directories from `direnv allow`.
|
|
||||||
directory = ".local/share/direnv";
|
|
||||||
user = "talexander";
|
|
||||||
group = "talexander";
|
|
||||||
mode = "0755";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@@ -131,9 +131,8 @@ in
|
|||||||
final.cmake-language-server
|
final.cmake-language-server
|
||||||
final.cmake # Used by cmake-language-server
|
final.cmake # Used by cmake-language-server
|
||||||
final.rust-analyzer
|
final.rust-analyzer
|
||||||
final.prettier # Format yaml, json, and JS
|
final.nodePackages_latest.prettier # Format yaml, json, and JS
|
||||||
final.terraform-ls
|
final.terraform-ls
|
||||||
final.typescript-language-server
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
'';
|
'';
|
||||||
@@ -141,12 +140,14 @@ in
|
|||||||
})
|
})
|
||||||
];
|
];
|
||||||
|
|
||||||
me.install.user.talexander.file = {
|
home-manager.users.talexander =
|
||||||
".config/emacs" = {
|
{ pkgs, ... }:
|
||||||
source = ./files/emacs;
|
{
|
||||||
recursive = true;
|
home.file.".config/emacs" = {
|
||||||
|
source = ./files/emacs;
|
||||||
|
recursive = true;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
|
||||||
})
|
})
|
||||||
(lib.mkIf (config.me.emacs_flavor == "plainmacs") {
|
(lib.mkIf (config.me.emacs_flavor == "plainmacs") {
|
||||||
nixpkgs.overlays = [
|
nixpkgs.overlays = [
|
||||||
|
|||||||
@@ -1,12 +1,6 @@
|
|||||||
(require 'common-lsp)
|
(require 'common-lsp)
|
||||||
(require 'util-tree-sitter)
|
(require 'util-tree-sitter)
|
||||||
|
|
||||||
(defun js-format-buffer ()
|
|
||||||
"Run prettier."
|
|
||||||
(interactive)
|
|
||||||
(run-command-on-buffer "prettier" "--stdin-filepath" buffer-file-name)
|
|
||||||
)
|
|
||||||
|
|
||||||
(use-package json-ts-mode
|
(use-package json-ts-mode
|
||||||
:ensure nil
|
:ensure nil
|
||||||
:pin manual
|
:pin manual
|
||||||
@@ -119,14 +113,10 @@
|
|||||||
("\\.js\\'" . js-ts-mode)
|
("\\.js\\'" . js-ts-mode)
|
||||||
)
|
)
|
||||||
:commands (js-ts-mode)
|
:commands (js-ts-mode)
|
||||||
:custom (
|
|
||||||
(js-indent-level 2)
|
|
||||||
)
|
|
||||||
:hook (
|
:hook (
|
||||||
(js-ts-mode . (lambda ()
|
(js-ts-mode . (lambda ()
|
||||||
(when-linux
|
(when-linux
|
||||||
(eglot-ensure)
|
(eglot-ensure)
|
||||||
(add-hook 'before-save-hook 'js-format-buffer nil 'local)
|
|
||||||
)
|
)
|
||||||
))
|
))
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -46,7 +46,7 @@
|
|||||||
(when rust-analyzer-command
|
(when rust-analyzer-command
|
||||||
;; (add-to-list 'eglot-server-programs `(rust-ts-mode . (,rust-analyzer-command)))
|
;; (add-to-list 'eglot-server-programs `(rust-ts-mode . (,rust-analyzer-command)))
|
||||||
(add-to-list 'eglot-server-programs `(rust-ts-mode . (,rust-analyzer-command :initializationOptions (:imports (:granularity (:enforce t :group "item")
|
(add-to-list 'eglot-server-programs `(rust-ts-mode . (,rust-analyzer-command :initializationOptions (:imports (:granularity (:enforce t :group "item")
|
||||||
:merge (:glob :json-false)
|
:merge (:glob nil)
|
||||||
:prefix "self")
|
:prefix "self")
|
||||||
))))
|
))))
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -5,18 +5,6 @@
|
|||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
|
||||||
git_wrapped =
|
|
||||||
package: prog:
|
|
||||||
pkgs.writeShellScriptBin "${prog}" ''
|
|
||||||
export PATH="${
|
|
||||||
lib.makeBinPath [
|
|
||||||
pkgs.meld
|
|
||||||
]
|
|
||||||
}:$PATH"
|
|
||||||
exec ${package}/bin/${prog} "''${@}"
|
|
||||||
'';
|
|
||||||
in
|
|
||||||
{
|
{
|
||||||
imports = [ ];
|
imports = [ ];
|
||||||
|
|
||||||
@@ -32,48 +20,66 @@ in
|
|||||||
config = lib.mkMerge [
|
config = lib.mkMerge [
|
||||||
{
|
{
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
my_git
|
git
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
(lib.mkIf (config.me.git.config != null) {
|
(lib.mkIf (config.me.git.config != null) {
|
||||||
me.install.user.talexander.file = {
|
home-manager.users.talexander =
|
||||||
".gitconfig" = {
|
{ pkgs, ... }:
|
||||||
source = config.me.git.config;
|
{
|
||||||
|
home.file.".gitconfig" = {
|
||||||
|
source = config.me.git.config;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
|
||||||
})
|
|
||||||
(lib.mkIf (config.me.graphical) {
|
|
||||||
nixpkgs.overlays = [
|
|
||||||
(final: prev: {
|
|
||||||
my_git = (
|
|
||||||
pkgs.buildEnv {
|
|
||||||
name = prev.git.name;
|
|
||||||
version = prev.git.version;
|
|
||||||
paths =
|
|
||||||
(builtins.map (git_wrapped prev.git) [
|
|
||||||
"git"
|
|
||||||
])
|
|
||||||
++ [
|
|
||||||
prev.git
|
|
||||||
];
|
|
||||||
extraOutputsToInstall = [
|
|
||||||
"man"
|
|
||||||
"doc"
|
|
||||||
"info"
|
|
||||||
];
|
|
||||||
nativeBuildInputs = [ final.makeWrapper ];
|
|
||||||
ignoreCollisions = true;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
})
|
|
||||||
];
|
|
||||||
})
|
|
||||||
(lib.mkIf (!config.me.graphical) {
|
|
||||||
nixpkgs.overlays = [
|
|
||||||
(final: prev: {
|
|
||||||
my_git = prev.git;
|
|
||||||
})
|
|
||||||
];
|
|
||||||
})
|
})
|
||||||
|
# (lib.mkIf (config.me.graphical) {
|
||||||
|
# nixpkgs.overlays = [
|
||||||
|
# (final: prev: {
|
||||||
|
# git = pkgs.buildEnv {
|
||||||
|
# name = prev.git.name;
|
||||||
|
# paths = [
|
||||||
|
# prev.git
|
||||||
|
# ];
|
||||||
|
# extraOutputsToInstall = [
|
||||||
|
# "man"
|
||||||
|
# "doc"
|
||||||
|
# "info"
|
||||||
|
# ];
|
||||||
|
# buildInputs = [ final.makeWrapper ];
|
||||||
|
# postBuild = ''
|
||||||
|
# wrapProgram $out/bin/git --prefix PATH : ${
|
||||||
|
# lib.makeBinPath [
|
||||||
|
# final.meld
|
||||||
|
# ]
|
||||||
|
# }
|
||||||
|
# '';
|
||||||
|
# };
|
||||||
|
# })
|
||||||
|
# ];
|
||||||
|
# })
|
||||||
|
# (lib.mkIf (!config.me.graphical) {
|
||||||
|
# nixpkgs.overlays = [
|
||||||
|
# (final: prev: {
|
||||||
|
# git = pkgs.buildEnv {
|
||||||
|
# name = prev.git.name;
|
||||||
|
# paths = [
|
||||||
|
# prev.git
|
||||||
|
# ];
|
||||||
|
# extraOutputsToInstall = [
|
||||||
|
# "man"
|
||||||
|
# "doc"
|
||||||
|
# "info"
|
||||||
|
# ];
|
||||||
|
# buildInputs = [ final.makeWrapper ];
|
||||||
|
# postBuild = ''
|
||||||
|
# wrapProgram $out/bin/git --prefix PATH : ${
|
||||||
|
# lib.makeBinPath [
|
||||||
|
# ]
|
||||||
|
# }
|
||||||
|
# '';
|
||||||
|
# };
|
||||||
|
# })
|
||||||
|
# ];
|
||||||
|
# })
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,5 +50,4 @@
|
|||||||
[rebase]
|
[rebase]
|
||||||
autoSquash = true
|
autoSquash = true
|
||||||
autoStash = true
|
autoStash = true
|
||||||
# updateRefs was annoying when you want to split a branch in two by rebasing away from commits from one branch and rebasing away some commits from another branch.
|
updateRefs = true
|
||||||
updateRefs = false
|
|
||||||
|
|||||||
@@ -57,11 +57,14 @@ in
|
|||||||
# disable-ccid = true;
|
# disable-ccid = true;
|
||||||
# };
|
# };
|
||||||
|
|
||||||
me.install.user.talexander.file = {
|
# .gnupg/scdaemon.conf
|
||||||
".gnupg/scdaemon.conf" = {
|
home-manager.users.talexander =
|
||||||
source = ./files/scdaemon.conf;
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
home.file.".gnupg/scdaemon.conf" = {
|
||||||
|
source = ./files/scdaemon.conf;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
|
||||||
|
|
||||||
# programs.gnupg.dirmngr.enable = true;
|
# programs.gnupg.dirmngr.enable = true;
|
||||||
programs.gnupg.agent = {
|
programs.gnupg.agent = {
|
||||||
|
|||||||
@@ -41,11 +41,15 @@ in
|
|||||||
exec_kanshi
|
exec_kanshi
|
||||||
];
|
];
|
||||||
|
|
||||||
me.install.user.talexander.file = {
|
home-manager.users.talexander =
|
||||||
".config/kanshi/config" = {
|
{ pkgs, ... }:
|
||||||
source = ./files/config_kanshi;
|
{
|
||||||
|
home.file = {
|
||||||
|
".config/kanshi/config" = {
|
||||||
|
source = ./files/config_kanshi;
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
|
||||||
})
|
})
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -78,13 +78,21 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
# home.file.".kodi/userdata/mediasources.xml".source = ./files/mediasources.xml;
|
home-manager.users.kodi =
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
# home.file.".kodi/userdata/mediasources.xml".source = ./files/mediasources.xml;
|
||||||
|
|
||||||
# home.file.".kodi/userdata/addon_data/peripheral.joystick/resources/buttonmaps/xml/linux/DualSense_Wireless_Controller_13b_8a.xml".source =
|
# home.file.".kodi/userdata/addon_data/peripheral.joystick/resources/buttonmaps/xml/linux/DualSense_Wireless_Controller_13b_8a.xml".source =
|
||||||
# ./files/DualSense_Wireless_Controller_13b_8a.xml;
|
# ./files/DualSense_Wireless_Controller_13b_8a.xml;
|
||||||
|
|
||||||
# TODO: Maybe .kodi/userdata/sources.xml
|
# TODO: Maybe .kodi/userdata/sources.xml
|
||||||
# TODO: ./userdata/guisettings.xml:303: <setting id="filecache.memorysize">128</setting>
|
# TODO: ./userdata/guisettings.xml:303: <setting id="filecache.memorysize">128</setting>
|
||||||
|
|
||||||
|
# The state version is required and should stay at the version you
|
||||||
|
# originally installed.
|
||||||
|
home.stateVersion = "24.11";
|
||||||
|
};
|
||||||
})
|
})
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -52,11 +52,13 @@ in
|
|||||||
imv
|
imv
|
||||||
];
|
];
|
||||||
|
|
||||||
me.install.user.talexander.file = {
|
home-manager.users.talexander =
|
||||||
".config/mpv/mpv.conf" = {
|
{ pkgs, ... }:
|
||||||
source = ./files/mpv.conf;
|
{
|
||||||
|
home.file.".config/mpv/mpv.conf" = {
|
||||||
|
source = ./files/mpv.conf;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
|
||||||
})
|
})
|
||||||
(lib.mkIf (config.me.graphics_card_type == "amd" || config.me.graphics_card_type == "intel") {
|
(lib.mkIf (config.me.graphics_card_type == "amd" || config.me.graphics_card_type == "intel") {
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
|
|||||||
@@ -8,14 +8,10 @@
|
|||||||
{
|
{
|
||||||
imports = [ ];
|
imports = [ ];
|
||||||
config = lib.mkMerge [
|
config = lib.mkMerge [
|
||||||
{
|
{ }
|
||||||
environment.systemPackages = with pkgs; [
|
(lib.mkIf (config.me.buildingIso) {
|
||||||
memtest86plus
|
# boot.loader.systemd-boot.memtest86.enable = true;
|
||||||
];
|
boot.loader.grub.memtest86.enable = true;
|
||||||
}
|
})
|
||||||
# (lib.mkIf (config.me.buildingIso) {
|
|
||||||
# boot.loader.systemd-boot.memtest86.enable = true;
|
|
||||||
# boot.loader.grub.memtest86.enable = true;
|
|
||||||
# })
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
config,
|
config,
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-dda3dcd3f,
|
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
|
|
||||||
@@ -65,7 +64,6 @@
|
|||||||
ldns # for drill
|
ldns # for drill
|
||||||
arp-scan # To find devices on the network
|
arp-scan # To find devices on the network
|
||||||
wavemon
|
wavemon
|
||||||
dhcpcd # For Android USB tethering.
|
|
||||||
];
|
];
|
||||||
|
|
||||||
boot.extraModprobeConfig = ''
|
boot.extraModprobeConfig = ''
|
||||||
@@ -93,13 +91,4 @@
|
|||||||
# This is enabled by default in nixos.
|
# This is enabled by default in nixos.
|
||||||
# "net.ipv6.conf.default.use_tempaddr" = 2;
|
# "net.ipv6.conf.default.use_tempaddr" = 2;
|
||||||
};
|
};
|
||||||
|
|
||||||
nixpkgs.overlays = [
|
|
||||||
(final: prev: {
|
|
||||||
inherit (pkgs-dda3dcd3f)
|
|
||||||
linux-firmware
|
|
||||||
;
|
|
||||||
})
|
|
||||||
];
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,7 +47,7 @@
|
|||||||
(lib.mkIf (!config.me.optimizations.enable) (
|
(lib.mkIf (!config.me.optimizations.enable) (
|
||||||
lib.mkMerge [
|
lib.mkMerge [
|
||||||
{
|
{
|
||||||
boot.kernelPackages = pkgs.linuxPackagesFor pkgs.linux_6_15;
|
boot.kernelPackages = pkgs.linuxPackagesFor pkgs.linux_6_14;
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
))
|
))
|
||||||
@@ -94,7 +94,7 @@
|
|||||||
HZ = lib.kernel.freeform "300";
|
HZ = lib.kernel.freeform "300";
|
||||||
HZ_300 = lib.kernel.yes;
|
HZ_300 = lib.kernel.yes;
|
||||||
HZ_1000 = lib.kernel.no;
|
HZ_1000 = lib.kernel.no;
|
||||||
} prev.linux_6_15;
|
} prev.linux_6_14;
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
(final: prev: {
|
(final: prev: {
|
||||||
@@ -132,7 +132,6 @@
|
|||||||
redis
|
redis
|
||||||
valkey
|
valkey
|
||||||
nix-serve-ng
|
nix-serve-ng
|
||||||
rapidjson
|
|
||||||
;
|
;
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -82,11 +82,13 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
me.install.user.talexander.file = {
|
home-manager.users.talexander =
|
||||||
".config/PCSX2/inis/PCSX2.ini" = {
|
{ pkgs, ... }:
|
||||||
source = ./files/PCSX2.ini;
|
{
|
||||||
|
home.file.".config/PCSX2/inis/PCSX2.ini" = {
|
||||||
|
source = ./files/PCSX2.ini;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
|
||||||
})
|
})
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -70,26 +70,16 @@ in
|
|||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
me.install.user.talexander.file = {
|
home-manager.users.talexander =
|
||||||
".config/rpcs3/config.yml" = lib.mkIf (config.me.rpcs3.config != null) {
|
{ pkgs, ... }:
|
||||||
source = rpcs3_config_yaml;
|
{
|
||||||
|
home.file.".config/rpcs3/config.yml" = lib.mkIf (config.me.rpcs3.config != null) {
|
||||||
|
source = rpcs3_config_yaml;
|
||||||
|
};
|
||||||
|
home.file.".config/rpcs3/GuiConfigs/CurrentSettings.ini" = {
|
||||||
|
source = ./files/CurrentSettings.ini;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
".config/rpcs3/GuiConfigs/CurrentSettings.ini" = {
|
|
||||||
source = ./files/CurrentSettings.ini;
|
|
||||||
};
|
|
||||||
".config/rpcs3/custom_configs/config_BLUS30443.yml" = {
|
|
||||||
# Demon's Souls per-game config.
|
|
||||||
source = ./files/config_BLUS30443.yml;
|
|
||||||
};
|
|
||||||
".config/rpcs3/patches/patch.yml" = {
|
|
||||||
# All of the available patches.
|
|
||||||
source = ./files/patch.yml;
|
|
||||||
};
|
|
||||||
".config/rpcs3/patch_config.yml" = {
|
|
||||||
# Patches that I have enabled.
|
|
||||||
source = ./files/patch_config.yml;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
environment.persistence."/persist" = lib.mkIf (!config.me.buildingIso) {
|
environment.persistence."/persist" = lib.mkIf (!config.me.buildingIso) {
|
||||||
hideMounts = true;
|
hideMounts = true;
|
||||||
@@ -156,13 +146,6 @@ in
|
|||||||
mode = "0755";
|
mode = "0755";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
|
||||||
# Netplay (RPCN) config and credentials
|
|
||||||
file = ".config/rpcs3/rpcn.yml";
|
|
||||||
parentDirectory = {
|
|
||||||
mode = "0755";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -172,6 +155,7 @@ in
|
|||||||
users.talexander = {
|
users.talexander = {
|
||||||
directories = [
|
directories = [
|
||||||
{
|
{
|
||||||
|
# Game saves
|
||||||
directory = ".cache/rpcs3";
|
directory = ".cache/rpcs3";
|
||||||
user = "talexander";
|
user = "talexander";
|
||||||
group = "talexander";
|
group = "talexander";
|
||||||
|
|||||||
@@ -1,14 +0,0 @@
|
|||||||
Core:
|
|
||||||
SPU Block Size: Safe
|
|
||||||
Video:
|
|
||||||
Write Color Buffers: true
|
|
||||||
Minimum Scalable Dimension: 640
|
|
||||||
Net:
|
|
||||||
Internet enabled: Connected
|
|
||||||
IP address: 0.0.0.0
|
|
||||||
Bind address: 0.0.0.0
|
|
||||||
DNS address: 8.8.8.8
|
|
||||||
IP swap list: "ds-eu-c.scej-online.jp=206.189.232.242&&ds-eu-g.scej-online.jp=206.189.232.242&&c.demons-souls.com=206.189.232.242&&g.demons-souls.com=206.189.232.242&&cmnap.scej-online.jp=206.189.232.242&&demons-souls.scej-online.jp=206.189.232.242"
|
|
||||||
UPNP Enabled: false
|
|
||||||
PSN status: RPCN
|
|
||||||
PSN Country: us
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,6 +0,0 @@
|
|||||||
PPU-83681f6110d33442329073b72b8dc88a2f677172:
|
|
||||||
Unlock FPS:
|
|
||||||
Demon's Souls:
|
|
||||||
BLUS30443:
|
|
||||||
01.00:
|
|
||||||
Enabled: true
|
|
||||||
@@ -48,14 +48,18 @@ in
|
|||||||
# ? cargo-public-api
|
# ? cargo-public-api
|
||||||
];
|
];
|
||||||
|
|
||||||
me.install.user.talexander.file = {
|
home-manager.users.talexander =
|
||||||
".cargo/config.toml" = {
|
{ pkgs, ... }:
|
||||||
source = ./files/cargo_config.toml;
|
{
|
||||||
|
home.file = {
|
||||||
|
".cargo/config.toml" = {
|
||||||
|
source = ./files/cargo_config.toml;
|
||||||
|
};
|
||||||
|
".rustup/settings.toml" = {
|
||||||
|
source = ./files/rustup_settings.toml;
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
".rustup/settings.toml" = {
|
|
||||||
source = ./files/rustup_settings.toml;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
environment.persistence."/state" = lib.mkIf (!config.me.buildingIso) {
|
environment.persistence."/state" = lib.mkIf (!config.me.buildingIso) {
|
||||||
hideMounts = true;
|
hideMounts = true;
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
# [target.x86_64-unknown-linux-gnu]
|
[target.x86_64-unknown-linux-gnu]
|
||||||
# rustflags = ["-C", "target-cpu=native", "-Zthreads=0"]
|
rustflags = ["-C", "target-cpu=native", "-Zthreads=0"]
|
||||||
|
|
||||||
# [unstable]
|
[unstable]
|
||||||
# codegen-backend = true
|
codegen-backend = true
|
||||||
|
|
||||||
# [profile.dev]
|
[profile.dev]
|
||||||
# codegen-backend = "cranelift"
|
codegen-backend = "cranelift"
|
||||||
|
|
||||||
[profile.dev.package."*"]
|
[profile.dev.package."*"]
|
||||||
# codegen-backend = "llvm"
|
codegen-backend = "llvm"
|
||||||
opt-level = 3
|
opt-level = 3
|
||||||
|
|||||||
@@ -1,110 +0,0 @@
|
|||||||
{
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
|
|
||||||
{
|
|
||||||
imports = [ ];
|
|
||||||
|
|
||||||
options.me = {
|
|
||||||
shadps4.enable = lib.mkOption {
|
|
||||||
type = lib.types.bool;
|
|
||||||
default = false;
|
|
||||||
example = true;
|
|
||||||
description = "Whether we want to install shadps4.";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = lib.mkIf config.me.shadps4.enable (
|
|
||||||
lib.mkMerge [
|
|
||||||
(lib.mkIf config.me.graphical {
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
shadps4
|
|
||||||
];
|
|
||||||
|
|
||||||
me.install.user.talexander.file = {
|
|
||||||
".local/share/shadPS4/config.toml" = {
|
|
||||||
source = ./files/config.toml;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
environment.persistence."/persist" = lib.mkIf (!config.me.buildingIso) {
|
|
||||||
hideMounts = true;
|
|
||||||
users.talexander = {
|
|
||||||
directories = [
|
|
||||||
{
|
|
||||||
# Location of ROMs.
|
|
||||||
directory = ".local/share/shadPS4/games";
|
|
||||||
user = "talexander";
|
|
||||||
group = "talexander";
|
|
||||||
mode = "0755";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
# Firmware.
|
|
||||||
directory = ".local/share/shadPS4/sys_modules";
|
|
||||||
user = "talexander";
|
|
||||||
group = "talexander";
|
|
||||||
mode = "0755";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
# Game saves.
|
|
||||||
directory = ".local/share/shadPS4/savedata";
|
|
||||||
user = "talexander";
|
|
||||||
group = "talexander";
|
|
||||||
mode = "0755";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
# DLC.
|
|
||||||
directory = ".local/share/shadPS4/addcont";
|
|
||||||
user = "talexander";
|
|
||||||
group = "talexander";
|
|
||||||
mode = "0755";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
files = [
|
|
||||||
{
|
|
||||||
# play times and recently played
|
|
||||||
file = ".local/share/shadPS4/play_time.txt";
|
|
||||||
parentDirectory = {
|
|
||||||
mode = "0755";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
environment.persistence."/state" = lib.mkIf (!config.me.buildingIso) {
|
|
||||||
hideMounts = true;
|
|
||||||
users.talexander = {
|
|
||||||
directories = [
|
|
||||||
{
|
|
||||||
# Cache.
|
|
||||||
directory = ".local/share/shadPS4/data";
|
|
||||||
user = "talexander";
|
|
||||||
group = "talexander";
|
|
||||||
mode = "0755";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
nixpkgs.overlays = [
|
|
||||||
(final: prev: {
|
|
||||||
shadps4 = prev.shadps4.overrideAttrs (old: {
|
|
||||||
version = "0.9.0";
|
|
||||||
src = final.fetchFromGitHub {
|
|
||||||
owner = "AzaharPlus";
|
|
||||||
repo = "shadPS4Plus";
|
|
||||||
tag = "SHADPS4PLUS_0_9_0_A";
|
|
||||||
hash = "sha256-ZwP+bOE4roWt51Ii53blDZzdq/SxK4Q69I4rLCNARLA=";
|
|
||||||
fetchSubmodules = true;
|
|
||||||
};
|
|
||||||
});
|
|
||||||
})
|
|
||||||
];
|
|
||||||
})
|
|
||||||
]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
[General]
|
|
||||||
# Without this, we get:
|
|
||||||
# /run/current-system/sw/bin/xdg-mime: line 1002: /nix/store/wd9bigydk9x8bsvnslrvb5klbgmh98v5-hm_mimeapps.list.new: Read-only file system
|
|
||||||
enableDiscordRPC = false
|
|
||||||
|
|
||||||
|
|
||||||
[GUI]
|
|
||||||
addonInstallDir = "/home/talexander/.local/share/shadPS4/addcont"
|
|
||||||
installDirs = ["/home/talexander/.local/share/shadPS4/games"]
|
|
||||||
installDirsEnabled = [true]
|
|
||||||
# Without the geometry settings shadps4 crashes instantly with a floating point error.
|
|
||||||
geometry_h = 981
|
|
||||||
geometry_w = 748
|
|
||||||
geometry_x = 0
|
|
||||||
geometry_y = 0
|
|
||||||
@@ -36,11 +36,15 @@ in
|
|||||||
exec_shikane
|
exec_shikane
|
||||||
];
|
];
|
||||||
|
|
||||||
me.install.user.talexander.file = {
|
home-manager.users.talexander =
|
||||||
".config/shikane/config.toml" = {
|
{ pkgs, ... }:
|
||||||
source = ./files/config.toml;
|
{
|
||||||
|
home.file = {
|
||||||
|
".config/shikane/config.toml" = {
|
||||||
|
source = ./files/config.toml;
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
|
||||||
})
|
})
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -27,14 +27,19 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
me.install.user.root.file = {
|
home-manager.users.talexander =
|
||||||
".ssh/config" = {
|
{ pkgs, ... }:
|
||||||
source = ./files/ssh_config_root;
|
{
|
||||||
|
home.file.".ssh/config" = {
|
||||||
|
source = ./files/ssh_config;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
|
||||||
me.install.user.talexander.file = {
|
home-manager.users.root =
|
||||||
".ssh/config" = {
|
{ pkgs, ... }:
|
||||||
source = ./files/ssh_config;
|
{
|
||||||
|
home.file.".ssh/config" = {
|
||||||
|
source = ./files/ssh_config_root;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -376,18 +376,26 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
me.install.user.talexander.file = {
|
home-manager.users.talexander =
|
||||||
".config/mimeapps.list" = {
|
{ pkgs, ... }:
|
||||||
# Configure default programs (for example, default browser)
|
{
|
||||||
source = ./files/mimeapps.list;
|
home.file = {
|
||||||
|
# Configure default programs (for example, default browser)
|
||||||
|
".config/mimeapps.list" = {
|
||||||
|
source = ./files/mimeapps.list;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
home.file = {
|
||||||
|
".config/gtk-3.0/settings.ini" = {
|
||||||
|
source = ./files/settings.ini;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
home.file = {
|
||||||
|
".icons/default" = {
|
||||||
|
source = "${pkgs.adwaita-icon-theme}/share/icons/Adwaita";
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
".config/gtk-3.0/settings.ini" = {
|
|
||||||
source = ./files/settings.ini;
|
|
||||||
};
|
|
||||||
".icons/default" = {
|
|
||||||
source = "${pkgs.adwaita-icon-theme}/share/icons/Adwaita";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# For mounting drives in pcmanfm
|
# For mounting drives in pcmanfm
|
||||||
services.gvfs.enable = true;
|
services.gvfs.enable = true;
|
||||||
|
|||||||
@@ -48,14 +48,16 @@
|
|||||||
})
|
})
|
||||||
];
|
];
|
||||||
|
|
||||||
me.install.user.talexander.file = {
|
home-manager.users.talexander =
|
||||||
".config/Code/User/settings.json" = {
|
{ pkgs, ... }:
|
||||||
source = ./files/settings.json;
|
{
|
||||||
|
home.file.".config/Code/User/settings.json" = {
|
||||||
|
source = ./files/settings.json;
|
||||||
|
};
|
||||||
|
home.file.".config/Code/User/keybindings.json" = {
|
||||||
|
source = ./files/keybindings.json;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
".config/Code/User/keybindings.json" = {
|
|
||||||
source = ./files/keybindings.json;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
})
|
})
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -113,14 +113,18 @@ in
|
|||||||
|
|
||||||
services.upower.enable = true; # for battery
|
services.upower.enable = true; # for battery
|
||||||
|
|
||||||
me.install.user.talexander.file = {
|
home-manager.users.talexander =
|
||||||
".config/waybar/config" = {
|
{ pkgs, ... }:
|
||||||
source = ./files/waybar_config.json;
|
{
|
||||||
|
home.file = {
|
||||||
|
".config/waybar/config" = {
|
||||||
|
source = ./files/waybar_config.json;
|
||||||
|
};
|
||||||
|
".config/waybar/style.css" = {
|
||||||
|
source = ./files/style.css;
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
".config/waybar/style.css" = {
|
|
||||||
source = ./files/style.css;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
})
|
})
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -49,8 +49,6 @@ let
|
|||||||
|
|
||||||
source ${pkgs.zsh-histdb}/share/zsh/plugins/zsh-histdb/histdb-interactive.zsh
|
source ${pkgs.zsh-histdb}/share/zsh/plugins/zsh-histdb/histdb-interactive.zsh
|
||||||
bindkey '^r' _histdb-isearch
|
bindkey '^r' _histdb-isearch
|
||||||
|
|
||||||
${lib.concatMapStringsSep "\n" (item: "source ${item}") config.me.zsh.includes}
|
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
@@ -64,16 +62,6 @@ in
|
|||||||
example = true;
|
example = true;
|
||||||
description = "Whether we want to install zsh.";
|
description = "Whether we want to install zsh.";
|
||||||
};
|
};
|
||||||
zsh.includes = lib.mkOption {
|
|
||||||
type = lib.types.listOf lib.types.package;
|
|
||||||
default = [ ];
|
|
||||||
example = lib.literalExpression ''
|
|
||||||
[ (pkgs.writeTextFile {
|
|
||||||
name = "launch-kanshi.conf";
|
|
||||||
text = "exec kanshi";
|
|
||||||
}) ]'';
|
|
||||||
description = "List of zshrc files to import.";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
config = lib.mkIf config.me.zsh.enable (
|
config = lib.mkIf config.me.zsh.enable (
|
||||||
@@ -90,11 +78,13 @@ in
|
|||||||
enable = true;
|
enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
me.install.user.talexander.file = {
|
home-manager.users.talexander =
|
||||||
".zshrc" = {
|
{ pkgs, ... }:
|
||||||
source = "${zshrc}";
|
{
|
||||||
|
home.file.".zshrc" = {
|
||||||
|
source = "${zshrc}";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
|
||||||
|
|
||||||
environment.persistence."/persist" = lib.mkIf (!config.me.buildingIso) {
|
environment.persistence."/persist" = lib.mkIf (!config.me.buildingIso) {
|
||||||
hideMounts = true;
|
hideMounts = true;
|
||||||
|
|||||||
@@ -2,179 +2,87 @@
|
|||||||
config,
|
config,
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
|
home-manager,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
cfg = config.me.install;
|
|
||||||
inherit (lib)
|
inherit (lib)
|
||||||
filter
|
|
||||||
attrNames
|
attrNames
|
||||||
|
filter
|
||||||
|
flatten
|
||||||
;
|
;
|
||||||
|
makeFileOption =
|
||||||
|
prefix:
|
||||||
|
lib.mkOption {
|
||||||
|
type = lib.types.attrsOf (
|
||||||
|
lib.types.submodule (
|
||||||
|
{ name, config, ... }:
|
||||||
|
{
|
||||||
|
options = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = true;
|
||||||
|
defaultText = "${prefix}.‹path›.enable";
|
||||||
|
example = false;
|
||||||
|
description = "Whether we want to install this file.";
|
||||||
|
};
|
||||||
|
method = lib.mkOption {
|
||||||
|
type = lib.types.enum [
|
||||||
|
"symlink"
|
||||||
|
"overwrite"
|
||||||
|
"initialize"
|
||||||
|
# "bind_mount" TODO: for directories?
|
||||||
|
];
|
||||||
|
default = "symlink";
|
||||||
|
defaultText = "${prefix}.‹path›.method";
|
||||||
|
example = "overwrite";
|
||||||
|
description = "The way in which the file should be installed.";
|
||||||
|
};
|
||||||
|
mode = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
default = "0444";
|
||||||
|
defaultText = "${prefix}.‹path›.mode";
|
||||||
|
example = "0750";
|
||||||
|
description = "The read, write, execute permission flags.";
|
||||||
|
};
|
||||||
|
source = lib.mkOption {
|
||||||
|
type = lib.types.path;
|
||||||
|
defaultText = "${prefix}.‹path›.source";
|
||||||
|
example = ./files/foo.txt;
|
||||||
|
description = "The source file to install into the destination.";
|
||||||
|
};
|
||||||
|
target = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
defaultText = "${prefix}.‹path›.target";
|
||||||
|
example = ".local/share/foo/bar.txt";
|
||||||
|
description = "The path where the file should be written.";
|
||||||
|
};
|
||||||
|
group = lib.mkOption {
|
||||||
|
type = lib.types.nullOr lib.types.str;
|
||||||
|
default = null;
|
||||||
|
defaultText = "${prefix}.‹path›.group";
|
||||||
|
example = ".local/share/foo/bar.txt";
|
||||||
|
description = "The group that should own the file.";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
get_shell_values =
|
config = {
|
||||||
target:
|
target = lib.mkDefault name;
|
||||||
let
|
};
|
||||||
homedir = config.users.users."${target.username}".home;
|
}
|
||||||
group = config.users.users."${target.username}".group;
|
)
|
||||||
in
|
);
|
||||||
{
|
defaultText = "${prefix}.‹path›";
|
||||||
source = lib.strings.escapeShellArg "${target.source}";
|
default = { };
|
||||||
destination = lib.strings.escapeShellArg "${homedir}/${target.target}";
|
example = lib.literalExpression ''
|
||||||
mode = lib.strings.escapeShellArg "${target.mode}";
|
{
|
||||||
dir_mode = lib.strings.escapeShellArg "${target.dir_mode}";
|
".config/foo/bar.txt" = {
|
||||||
username = lib.strings.escapeShellArg "${target.username}";
|
source = ./files/bar.txt
|
||||||
group = lib.strings.escapeShellArg "${group}";
|
};
|
||||||
|
}
|
||||||
|
'';
|
||||||
};
|
};
|
||||||
install_user_file =
|
|
||||||
let
|
|
||||||
constructors = {
|
|
||||||
"overwrite" = install_user_file_overwrite;
|
|
||||||
"symlink" = install_user_file_symlink;
|
|
||||||
};
|
|
||||||
in
|
|
||||||
stage: target: (constructors."${target.method}"."${stage}" target);
|
|
||||||
install_user_file_overwrite = {
|
|
||||||
"check" = (target: "");
|
|
||||||
"install" = (
|
|
||||||
target:
|
|
||||||
let
|
|
||||||
inherit (get_shell_values target)
|
|
||||||
source
|
|
||||||
destination
|
|
||||||
mode
|
|
||||||
dir_mode
|
|
||||||
username
|
|
||||||
group
|
|
||||||
;
|
|
||||||
flags = lib.strings.concatStringsSep " " [
|
|
||||||
(if mode != "" then "-m ${mode}" else "")
|
|
||||||
(if username != "" then "-o ${username}" else "")
|
|
||||||
(if group != "" then "-g ${group}" else "")
|
|
||||||
];
|
|
||||||
dir_flags = lib.strings.concatStringsSep " " [
|
|
||||||
(if dir_mode != "" then "-m ${dir_mode}" else "")
|
|
||||||
(if username != "" then "-o ${username}" else "")
|
|
||||||
(if group != "" then "-g ${group}" else "")
|
|
||||||
];
|
|
||||||
in
|
|
||||||
if target.recursive then
|
|
||||||
[
|
|
||||||
''
|
|
||||||
find ${source} -type f -print0 | while read -r -d "" file; do
|
|
||||||
relative_path=$(realpath -s --relative-to ${source} "$file")
|
|
||||||
full_dest=${destination}/"$relative_path"
|
|
||||||
create_containing_directories "$full_dest" ${dir_flags}
|
|
||||||
$DRY_RUN_CMD install $VERBOSE_ARG --compare ${flags} "$file" "$full_dest"
|
|
||||||
done
|
|
||||||
''
|
|
||||||
]
|
|
||||||
else
|
|
||||||
[
|
|
||||||
''
|
|
||||||
create_containing_directories ${destination} ${dir_flags}
|
|
||||||
$DRY_RUN_CMD install $VERBOSE_ARG --compare ${flags} ${source} ${destination}
|
|
||||||
''
|
|
||||||
]
|
|
||||||
);
|
|
||||||
"uninstall" = (
|
|
||||||
target:
|
|
||||||
let
|
|
||||||
inherit (get_shell_values target)
|
|
||||||
source
|
|
||||||
destination
|
|
||||||
;
|
|
||||||
in
|
|
||||||
if target.recursive then
|
|
||||||
[
|
|
||||||
''
|
|
||||||
find ${source} -type f -print0 | while read -r -d "" file; do
|
|
||||||
relative_path=$(realpath -s --relative-to ${source} "$file")
|
|
||||||
full_dest=${destination}/"$relative_path"
|
|
||||||
$DRY_RUN_CMD echo rm -f "$full_dest"
|
|
||||||
done
|
|
||||||
''
|
|
||||||
]
|
|
||||||
else
|
|
||||||
[
|
|
||||||
''
|
|
||||||
$DRY_RUN_CMD echo rm -f ${destination}
|
|
||||||
''
|
|
||||||
]
|
|
||||||
);
|
|
||||||
};
|
|
||||||
install_user_file_symlink = {
|
|
||||||
"check" = (target: "");
|
|
||||||
"install" = (
|
|
||||||
target:
|
|
||||||
let
|
|
||||||
inherit (get_shell_values target)
|
|
||||||
source
|
|
||||||
destination
|
|
||||||
mode
|
|
||||||
dir_mode
|
|
||||||
username
|
|
||||||
group
|
|
||||||
;
|
|
||||||
owner = lib.strings.concatStringsSep ":" (
|
|
||||||
filter (val: val != "") [
|
|
||||||
username
|
|
||||||
group
|
|
||||||
]
|
|
||||||
);
|
|
||||||
dir_flags = lib.strings.concatStringsSep " " [
|
|
||||||
(if dir_mode != "" then "-m ${dir_mode}" else "")
|
|
||||||
(if username != "" then "-o ${username}" else "")
|
|
||||||
(if group != "" then "-g ${group}" else "")
|
|
||||||
];
|
|
||||||
in
|
|
||||||
if target.recursive then
|
|
||||||
[
|
|
||||||
''
|
|
||||||
find ${source} -type f -print0 | while read -r -d "" file; do
|
|
||||||
relative_path=$(realpath -s --relative-to ${source} "$file")
|
|
||||||
full_dest=${destination}/"$relative_path"
|
|
||||||
create_containing_directories "$full_dest" ${dir_flags}
|
|
||||||
$DRY_RUN_CMD ln $VERBOSE_ARG -s "$file" "$full_dest"
|
|
||||||
$DRY_RUN_CMD chown $VERBOSE_ARG -h ${owner} "$full_dest"
|
|
||||||
done
|
|
||||||
''
|
|
||||||
]
|
|
||||||
else
|
|
||||||
[
|
|
||||||
''
|
|
||||||
create_containing_directories ${destination} ${dir_flags}
|
|
||||||
$DRY_RUN_CMD ln $VERBOSE_ARG -s ${source} ${destination}
|
|
||||||
$DRY_RUN_CMD chown $VERBOSE_ARG -h ${owner} ${destination}
|
|
||||||
''
|
|
||||||
]
|
|
||||||
);
|
|
||||||
"uninstall" = (
|
|
||||||
target:
|
|
||||||
let
|
|
||||||
inherit (get_shell_values target)
|
|
||||||
source
|
|
||||||
destination
|
|
||||||
;
|
|
||||||
in
|
|
||||||
if target.recursive then
|
|
||||||
[
|
|
||||||
''
|
|
||||||
find ${source} -type f -print0 | while read -r -d "" file; do
|
|
||||||
relative_path=$(realpath -s --relative-to ${source} "$file")
|
|
||||||
full_dest=${destination}/"$relative_path"
|
|
||||||
$DRY_RUN_CMD echo rm -f "$full_dest"
|
|
||||||
done
|
|
||||||
''
|
|
||||||
]
|
|
||||||
else
|
|
||||||
[
|
|
||||||
''
|
|
||||||
$DRY_RUN_CMD echo rm -f ${destination}
|
|
||||||
''
|
|
||||||
]
|
|
||||||
);
|
|
||||||
};
|
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
imports = [ ];
|
imports = [ ];
|
||||||
@@ -184,150 +92,88 @@ in
|
|||||||
type = lib.types.attrsOf (
|
type = lib.types.attrsOf (
|
||||||
lib.types.submodule (
|
lib.types.submodule (
|
||||||
{ name, config, ... }:
|
{ name, config, ... }:
|
||||||
let
|
|
||||||
username = name;
|
|
||||||
in
|
|
||||||
{
|
{
|
||||||
options = {
|
options = {
|
||||||
enable = lib.mkOption {
|
enable = lib.mkOption {
|
||||||
type = lib.types.bool;
|
type = lib.types.bool;
|
||||||
default = true;
|
default = true;
|
||||||
defaultText = "enable";
|
defaultText = "me.install.user.‹username›.enable";
|
||||||
example = lib.literalExpression false;
|
example = false;
|
||||||
description = "Whether we want to install files in this user's home directory.";
|
description = "Whether we want to install files in this user's home directory.";
|
||||||
};
|
};
|
||||||
|
target_username = lib.mkOption {
|
||||||
file = lib.mkOption {
|
type = lib.types.str;
|
||||||
type = lib.types.attrsOf (
|
defaultText = "me.install.file.‹username›.target_username";
|
||||||
lib.types.submodule (
|
example = "root";
|
||||||
{ name, config, ... }:
|
description = "The username for the user whose home directory will contain the file.";
|
||||||
let
|
|
||||||
path = name;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
options = {
|
|
||||||
enable = lib.mkOption {
|
|
||||||
type = lib.types.bool;
|
|
||||||
default = true;
|
|
||||||
defaultText = "enable";
|
|
||||||
example = lib.literalExpression false;
|
|
||||||
description = "Whether we want to install this file in this user's home directory.";
|
|
||||||
};
|
|
||||||
username = lib.mkOption {
|
|
||||||
type = lib.types.str;
|
|
||||||
defaultText = "username";
|
|
||||||
example = "root";
|
|
||||||
description = "The username for the user whose home directory will contain the file.";
|
|
||||||
};
|
|
||||||
target = lib.mkOption {
|
|
||||||
type = lib.types.str;
|
|
||||||
defaultText = "target";
|
|
||||||
example = ".local/share/foo/bar.txt";
|
|
||||||
description = "The path where the file should be written.";
|
|
||||||
};
|
|
||||||
method = lib.mkOption {
|
|
||||||
type = lib.types.enum [
|
|
||||||
"symlink"
|
|
||||||
"overwrite"
|
|
||||||
# "bind_mount" TODO: for directories?
|
|
||||||
];
|
|
||||||
default = "symlink";
|
|
||||||
defaultText = "me.install.file.‹path›.method";
|
|
||||||
example = "overwrite";
|
|
||||||
description = "The way in which the file should be installed.";
|
|
||||||
};
|
|
||||||
mode = lib.mkOption {
|
|
||||||
type = lib.types.str;
|
|
||||||
default = "0444";
|
|
||||||
defaultText = "me.install.file.‹path›.mode";
|
|
||||||
example = "0750";
|
|
||||||
description = "The read, write, execute permission flags.";
|
|
||||||
};
|
|
||||||
dir_mode = lib.mkOption {
|
|
||||||
type = lib.types.str;
|
|
||||||
default = "0755";
|
|
||||||
defaultText = "dir_mode";
|
|
||||||
example = "0755";
|
|
||||||
description = "The read, write, execute permission flags for any parent directories that need to be created.";
|
|
||||||
};
|
|
||||||
source = lib.mkOption {
|
|
||||||
type = lib.types.path;
|
|
||||||
defaultText = "me.install.file.‹path›.source";
|
|
||||||
example = ./files/foo.txt;
|
|
||||||
description = "The source file to install into the destination.";
|
|
||||||
};
|
|
||||||
recursive = lib.mkOption {
|
|
||||||
type = lib.types.bool;
|
|
||||||
default = false;
|
|
||||||
defaultText = "recursive";
|
|
||||||
example = lib.literalExpression false;
|
|
||||||
description = "Whether we want to recurse through the directory doing individual installs for each file.";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = {
|
|
||||||
username = lib.mkDefault username;
|
|
||||||
target = lib.mkDefault path;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
)
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
|
file = makeFileOption "me.install.user.‹username›.file";
|
||||||
|
};
|
||||||
|
|
||||||
|
config = {
|
||||||
|
target_username = lib.mkDefault name;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
defaultText = "me.install.user.‹username›";
|
||||||
|
default = { };
|
||||||
|
# TODO: example
|
||||||
};
|
};
|
||||||
|
# TODO: Global option owned by root?
|
||||||
|
# file = makeFileOption "me.install.file";
|
||||||
};
|
};
|
||||||
|
|
||||||
config =
|
config =
|
||||||
let
|
let
|
||||||
all_users = builtins.map (username: cfg.user."${username}") (attrNames cfg.user);
|
cfg = config.me.install;
|
||||||
enabled_users = filter (user: user.enable) all_users;
|
active_install_users = filter (username: cfg.user."${username}".enable) (attrNames cfg.user);
|
||||||
all_file_targets = lib.flatten (
|
install_commands = flatten (
|
||||||
builtins.map (user: (builtins.map (path: user.file."${path}") (attrNames user.file))) enabled_users
|
builtins.map (
|
||||||
);
|
username:
|
||||||
enabled_file_targets = filter (target: target.enable) all_file_targets;
|
let
|
||||||
check_commands = lib.flatten (builtins.map (install_user_file "check") enabled_file_targets);
|
active_install_file_targets = filter (target: cfg.user."${username}".file."${target}".enable) (
|
||||||
install_commands = lib.flatten (builtins.map (install_user_file "install") enabled_file_targets);
|
attrNames cfg.user."${username}".file
|
||||||
uninstall_commands = lib.flatten (
|
);
|
||||||
builtins.map (install_user_file "uninstall") enabled_file_targets
|
in
|
||||||
|
builtins.map (
|
||||||
|
target:
|
||||||
|
let
|
||||||
|
target_config = cfg.user."${username}".file."${target}";
|
||||||
|
source = lib.strings.escapeShellArg "${target_config.source}";
|
||||||
|
destination = lib.strings.escapeShellArg "${target_config.target}";
|
||||||
|
mode = lib.strings.escapeShellArg "${target_config.mode}";
|
||||||
|
escaped_username = lib.strings.escapeShellArg "${username}";
|
||||||
|
escaped_group =
|
||||||
|
if target_config.group == null then
|
||||||
|
"$(id -g ${escaped_username})"
|
||||||
|
else
|
||||||
|
(lib.strings.escapeShellArg "${target_config.group}");
|
||||||
|
in
|
||||||
|
''
|
||||||
|
$DRY_RUN_CMD install $VERBOSE_ARG -D --compare -o ${escaped_username} -g ${escaped_group} -m ${mode} ${source} ${destination}
|
||||||
|
''
|
||||||
|
) active_install_file_targets
|
||||||
|
) active_install_users
|
||||||
);
|
);
|
||||||
|
|
||||||
in
|
in
|
||||||
{
|
lib.mkMerge [
|
||||||
systemd.services.me-install-file = {
|
(lib.mkIf (install_commands != [ ]) ({
|
||||||
enable = true;
|
systemd.services.me-install-file = {
|
||||||
description = "me-install-file";
|
enable = true;
|
||||||
wantedBy = [ "multi-user.target" ];
|
description = "me-install-file";
|
||||||
wants = [ "multi-user.target" ];
|
wantedBy = [ "multi-user.target" ];
|
||||||
before = [ "multi-user.target" ];
|
wants = [ "multi-user.target" ];
|
||||||
# path = with pkgs; [
|
after = [ "multi-user.target" ];
|
||||||
# zfs
|
unitConfig.DefaultDependencies = "no";
|
||||||
# ];
|
serviceConfig = {
|
||||||
unitConfig.DefaultDependencies = "no";
|
Type = "oneshot";
|
||||||
serviceConfig = {
|
RemainAfterExit = "yes";
|
||||||
Type = "oneshot";
|
};
|
||||||
RemainAfterExit = "yes";
|
script = (lib.strings.concatStringsSep "\n" install_commands);
|
||||||
};
|
};
|
||||||
script =
|
}))
|
||||||
''
|
];
|
||||||
set -o pipefail
|
|
||||||
IFS=$'\n\t'
|
|
||||||
source ${./files/lib.bash}
|
|
||||||
''
|
|
||||||
+ (lib.strings.concatStringsSep "\n" (
|
|
||||||
[
|
|
||||||
]
|
|
||||||
++ check_commands
|
|
||||||
++ install_commands
|
|
||||||
));
|
|
||||||
preStop =
|
|
||||||
''
|
|
||||||
set -o pipefail
|
|
||||||
IFS=$'\n\t'
|
|
||||||
source ${./files/lib.bash}
|
|
||||||
''
|
|
||||||
+ (lib.strings.concatStringsSep "\n" uninstall_commands);
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,38 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
#
|
|
||||||
|
|
||||||
############## Setup #########################
|
|
||||||
|
|
||||||
function die {
|
|
||||||
local status_code="$1"
|
|
||||||
shift
|
|
||||||
(>&2 echo "${@}")
|
|
||||||
exit "$status_code"
|
|
||||||
}
|
|
||||||
|
|
||||||
function log {
|
|
||||||
(>&2 echo "${@}")
|
|
||||||
}
|
|
||||||
|
|
||||||
############## Program #########################
|
|
||||||
|
|
||||||
function create_containing_directories {
|
|
||||||
local full_dest="$1"
|
|
||||||
shift 1
|
|
||||||
local dirs_to_create=()
|
|
||||||
local containing_directory="$full_dest"
|
|
||||||
while true; do
|
|
||||||
containing_directory=$(dirname "$containing_directory")
|
|
||||||
if [ -e "$containing_directory" ] || [ "$containing_directory" = "/" ]; then
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
dirs_to_create+=($containing_directory)
|
|
||||||
done
|
|
||||||
|
|
||||||
for (( idx=${#dirs_to_create[@]}-1 ; idx>=0 ; idx-- )) ; do
|
|
||||||
local containing_directory="${dirs_to_create[idx]}"
|
|
||||||
log "Creating $containing_directory"
|
|
||||||
$DRY_RUN_CMD install $VERBOSE_ARG -d "${@}" "$containing_directory"
|
|
||||||
done
|
|
||||||
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user