mirror of
https://github.com/tuxdotrs/nix-config.git
synced 2026-06-20 19:26:32 +05:30
Compare commits
7 Commits
841f2ca4fb
...
8d3e740614
| Author | SHA1 | Date | |
|---|---|---|---|
|
8d3e740614
|
|||
|
dfd7789987
|
|||
|
376f5d053e
|
|||
|
28d46e7dec
|
|||
|
ef74ba2494
|
|||
|
9988f0a6cc
|
|||
|
c9df2483ec
|
79
flake.lock
generated
79
flake.lock
generated
@@ -271,6 +271,27 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-parts_4": {
|
||||
"inputs": {
|
||||
"nixpkgs-lib": [
|
||||
"nur",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1733312601,
|
||||
"narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=",
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-utils": {
|
||||
"inputs": {
|
||||
"systems": "systems_4"
|
||||
@@ -912,6 +933,22 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_10": {
|
||||
"locked": {
|
||||
"lastModified": 1770107345,
|
||||
"narHash": "sha256-tbS0Ebx2PiA1FRW8mt8oejR0qMXmziJmPaU1d4kYY9g=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "4533d9293756b63904b7238acb84ac8fe4c8c2c4",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixpkgs-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1743014863,
|
||||
@@ -1009,6 +1046,22 @@
|
||||
}
|
||||
},
|
||||
"nixpkgs_8": {
|
||||
"locked": {
|
||||
"lastModified": 1777954456,
|
||||
"narHash": "sha256-hGdgeU2Nk87RAuZyYjyDjFL6LK7dAZN5RE9+hrDTkDU=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "549bd84d6279f9852cae6225e372cc67fb91a4c1",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_9": {
|
||||
"locked": {
|
||||
"lastModified": 1777918403,
|
||||
"narHash": "sha256-7QiZv0LcW1yIOLo2LNuCQjWon1Z1r99FwK24hbtBOF4=",
|
||||
@@ -1024,19 +1077,22 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_9": {
|
||||
"nur": {
|
||||
"inputs": {
|
||||
"flake-parts": "flake-parts_4",
|
||||
"nixpkgs": "nixpkgs_8"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1770107345,
|
||||
"narHash": "sha256-tbS0Ebx2PiA1FRW8mt8oejR0qMXmziJmPaU1d4kYY9g=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "4533d9293756b63904b7238acb84ac8fe4c8c2c4",
|
||||
"lastModified": 1778156530,
|
||||
"narHash": "sha256-4VhPk2NQKyYptNw1x/HG23sFmR4iYTOTZhGhzzYDQOs=",
|
||||
"owner": "nix-community",
|
||||
"repo": "nur",
|
||||
"rev": "1b24f43e7f25d9c297a2ed45c654a72fc68d3d29",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixpkgs-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"owner": "nix-community",
|
||||
"repo": "nur",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
@@ -1079,6 +1135,7 @@
|
||||
"nixos-hardware": "nixos-hardware",
|
||||
"nixpkgs": "nixpkgs_7",
|
||||
"nixpkgs-stable": "nixpkgs-stable",
|
||||
"nur": "nur",
|
||||
"sops-nix": "sops-nix",
|
||||
"tnvim": "tnvim",
|
||||
"tpanel": "tpanel",
|
||||
@@ -1173,7 +1230,7 @@
|
||||
},
|
||||
"sops-nix": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs_8"
|
||||
"nixpkgs": "nixpkgs_9"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1777944972,
|
||||
@@ -1292,7 +1349,7 @@
|
||||
},
|
||||
"treefmt-nix": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs_9"
|
||||
"nixpkgs": "nixpkgs_10"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1775636079,
|
||||
|
||||
@@ -56,5 +56,6 @@
|
||||
hyprland.url = "github:hyprwm/Hyprland";
|
||||
awww.url = "git+https://codeberg.org/LGFae/awww";
|
||||
nixcord.url = "github:kaylorben/nixcord";
|
||||
nur.url = "github:nix-community/nur";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -20,6 +20,8 @@
|
||||
config.allowUnfree = true;
|
||||
};
|
||||
};
|
||||
|
||||
nur = inputs.nur.overlays.default;
|
||||
};
|
||||
|
||||
perSystem =
|
||||
|
||||
75
modules/hm/desktop/firefox.nix
Normal file
75
modules/hm/desktop/firefox.nix
Normal file
@@ -0,0 +1,75 @@
|
||||
{
|
||||
flake.modules.homeManager.desktop =
|
||||
{
|
||||
pkgs,
|
||||
userName,
|
||||
...
|
||||
}:
|
||||
{
|
||||
programs.firefox = {
|
||||
enable = true;
|
||||
|
||||
package = pkgs.firefox.override {
|
||||
extraPolicies = {
|
||||
CaptivePortal = false;
|
||||
DisableFirefoxStudies = true;
|
||||
DisablePocket = true;
|
||||
DisableTelemetry = true;
|
||||
DisableFirefoxAccounts = false;
|
||||
NoDefaultBookmarks = true;
|
||||
OfferToSaveLogins = false;
|
||||
OfferToSaveLoginsDefault = false;
|
||||
PasswordManagerEnabled = false;
|
||||
FirefoxHome = {
|
||||
Search = true;
|
||||
Pocket = false;
|
||||
Snippets = false;
|
||||
TopSites = false;
|
||||
Highlights = false;
|
||||
};
|
||||
UserMessaging = {
|
||||
ExtensionRecommendations = false;
|
||||
SkipOnboarding = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
profiles = {
|
||||
${userName} = {
|
||||
id = 0;
|
||||
name = "tux";
|
||||
search = {
|
||||
force = true;
|
||||
default = "google";
|
||||
};
|
||||
settings = {
|
||||
"general.smoothScroll" = true;
|
||||
"extensions.activeThemeID" = "firefox-compact-dark@mozilla.org";
|
||||
"layout.css.prefers-color-scheme.content-override" = 0;
|
||||
"browser.compactmode.show" = true;
|
||||
"browser.tabs.firefox-view" = false;
|
||||
"browser.bookmarks.addedImportButton" = false;
|
||||
"extensions.pocket.enabled" = false;
|
||||
"browser.fullscreen.autohide" = false;
|
||||
};
|
||||
extraConfig = ''
|
||||
user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true);
|
||||
user_pref("full-screen-api.ignore-widgets", true);
|
||||
user_pref("media.ffmpeg.vaapi.enabled", true);
|
||||
user_pref("media.rdd-vpx.enabled", true);
|
||||
'';
|
||||
|
||||
extensions.packages = with pkgs.nur.repos.rycee.firefox-addons; [
|
||||
ublock-origin
|
||||
facebook-container
|
||||
metamask
|
||||
darkreader
|
||||
bitwarden
|
||||
wappalyzer
|
||||
clearurls
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -17,6 +17,9 @@
|
||||
"name:DP-1, width:1080, height:1920, refresh:144, x:4000, y:0, vrr:0, rr:3"
|
||||
];
|
||||
|
||||
focus_cross_monitor = 1;
|
||||
exchange_cross_monitor = 1;
|
||||
|
||||
# Keyboard
|
||||
repeat_rate = 25;
|
||||
repeat_delay = 600;
|
||||
@@ -100,6 +103,7 @@
|
||||
# apps
|
||||
"SUPER, Return, spawn, wezterm"
|
||||
"SUPER, Space, spawn, vicinae toggle"
|
||||
"SUPER, D, spawn, vesktop"
|
||||
"SUPER, B, spawn, brave"
|
||||
"SUPER, V, spawn, vicinae vicinae://extensions/vicinae/clipboard/history"
|
||||
"SUPER+SHIFT, W, spawn, vicinae vicinae://extensions/sovereign/awww-switcher/wpgrid"
|
||||
@@ -140,25 +144,25 @@
|
||||
"SUPER, Down, focusdir, down"
|
||||
|
||||
# switch view
|
||||
"SUPER, 1, view, 1, 0"
|
||||
"SUPER, 2, view, 2, 0"
|
||||
"SUPER, 3, view, 3, 0"
|
||||
"SUPER, 4, view, 4, 0"
|
||||
"SUPER, 5, view, 5, 0"
|
||||
"SUPER, 1, view, 1, 1"
|
||||
"SUPER, 2, view, 2, 1"
|
||||
"SUPER, 3, view, 3, 1"
|
||||
"SUPER, 4, view, 4, 1"
|
||||
"SUPER, 5, view, 5, 1"
|
||||
|
||||
# move client to the tag with focus
|
||||
"SUPER+SHIFT, 1, tagsilent, 1, 0"
|
||||
"SUPER+SHIFT, 2, tagsilent, 2, 0"
|
||||
"SUPER+SHIFT, 3, tagsilent, 3, 0"
|
||||
"SUPER+SHIFT, 4, tagsilent, 4, 0"
|
||||
"SUPER+SHIFT, 5, tagsilent, 5, 0"
|
||||
"SUPER+SHIFT, 1, tagsilent, 1, 1"
|
||||
"SUPER+SHIFT, 2, tagsilent, 2, 1"
|
||||
"SUPER+SHIFT, 3, tagsilent, 3, 1"
|
||||
"SUPER+SHIFT, 4, tagsilent, 4, 1"
|
||||
"SUPER+SHIFT, 5, tagsilent, 5, 1"
|
||||
|
||||
# move client to the tag without focus
|
||||
"SUPER+ALT, 1, tag, 1, 0"
|
||||
"SUPER+ALT, 2, tag, 2, 0"
|
||||
"SUPER+ALT, 3, tag, 3, 0"
|
||||
"SUPER+ALT, 4, tag, 4, 0"
|
||||
"SUPER+ALT, 5, tag, 5, 0"
|
||||
"SUPER+ALT, 1, tag, 1, 1"
|
||||
"SUPER+ALT, 2, tag, 2, 1"
|
||||
"SUPER+ALT, 3, tag, 3, 1"
|
||||
"SUPER+ALT, 4, tag, 4, 1"
|
||||
"SUPER+ALT, 5, tag, 5, 1"
|
||||
];
|
||||
|
||||
# Window effect
|
||||
|
||||
@@ -7,16 +7,16 @@
|
||||
};
|
||||
settings = {
|
||||
provider = {
|
||||
google = {
|
||||
options = {
|
||||
apiKey = "{file:/run/secrets/gemini_api_key}";
|
||||
};
|
||||
};
|
||||
openrouter = {
|
||||
options = {
|
||||
apiKey = "{file:/run/secrets/open_router_api_key}";
|
||||
};
|
||||
};
|
||||
opencode-go = {
|
||||
options = {
|
||||
apiKey = "{file:/run/secrets/open_code_go_api_key}";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
{
|
||||
pkgs,
|
||||
hostName,
|
||||
userName,
|
||||
...
|
||||
}:
|
||||
{
|
||||
@@ -22,12 +23,30 @@
|
||||
docker.nvidia.enable = true;
|
||||
qemu.enable = true;
|
||||
waydroid.enable = true;
|
||||
distrobox.enable = true;
|
||||
};
|
||||
};
|
||||
|
||||
sops.secrets.tux-password = {
|
||||
sopsFile = ./secrets.yaml;
|
||||
neededForUsers = true;
|
||||
sops.secrets = {
|
||||
tux-password = {
|
||||
sopsFile = ./secrets.yaml;
|
||||
neededForUsers = true;
|
||||
};
|
||||
|
||||
openrouter_api_key = {
|
||||
sopsFile = ./secrets.yaml;
|
||||
owner = userName;
|
||||
};
|
||||
|
||||
opencode_go_api_key = {
|
||||
sopsFile = ./secrets.yaml;
|
||||
owner = userName;
|
||||
};
|
||||
|
||||
"vicinae.json" = {
|
||||
sopsFile = ./secrets.yaml;
|
||||
owner = userName;
|
||||
};
|
||||
};
|
||||
|
||||
# --- Boot ---
|
||||
@@ -63,24 +82,15 @@
|
||||
|
||||
# --- Hardware / GPU ---
|
||||
hardware = {
|
||||
graphics = {
|
||||
enable = true;
|
||||
enable32Bit = true;
|
||||
};
|
||||
nvidia = {
|
||||
modesetting.enable = true;
|
||||
open = false;
|
||||
nvidiaSettings = true;
|
||||
};
|
||||
|
||||
enableAllFirmware = true;
|
||||
usb-modeswitch.enable = true;
|
||||
};
|
||||
|
||||
nixpkgs.config.cudaSupport = true;
|
||||
services.xserver.videoDrivers = [ "nvidia" ];
|
||||
|
||||
# --- Programs ---
|
||||
programs.firefox.enable = true;
|
||||
environment.systemPackages = with pkgs; [ nvtopPackages.full ];
|
||||
|
||||
# !!! DO NOT CHANGE THIS !!!
|
||||
# This should match the version used at initial install.
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
tux-password: ENC[AES256_GCM,data:EJFFMc0W1YvCLINg4kETlUbqMYSfRTsiRuoB5MybaVwl7bbBXyPFo/MspFFMXpAqSPrzRAPaM8Lxk9ndbjt7gZpSu1dPThq36Q==,iv:zn3UUMOcW09u6KTz87tDr1wfmsLMKIRBDpLfQhg0p14=,tag:AOs7NASXeo98mNKqsYP3Ww==,type:str]
|
||||
gemini_api_key: ENC[AES256_GCM,data:agH39C8hXX1jKYq03Z70aHHfrKSbNnHJfndMB53YJgWEzban7uMA,iv:fnYOySXisW1n6Moad9xBoRQFtRa/J6zTcp0lAMEtguw=,tag:0ENL4uu+8OpNc9X+hy7SiQ==,type:str]
|
||||
openrouter_api_key: ENC[AES256_GCM,data:VBhV4NcR+7O7X2/OpN2yAGnfcSS2o3Zbvr5g3LHjdUixNSq8OZupsT9SVJDGE/RJp6nunPnYo4K8qQP2+m3K3aeQYKIyT5KNTg==,iv:CVLnloUsobanpHOuP31eIGpGoJOODukGaEmQRF+RPGw=,tag:DdEtCHMPwIIbdwZis4lQgg==,type:str]
|
||||
opencode_go_api_key: ENC[AES256_GCM,data:F7WXUHDX+pESqQJ4Sg5lNXqHLvsCd1bDFPZOutuacDFu3wLHs8i0kD/rLZ+m78OmRBRv2P3kf/gJsggtkvLC/PADYQ==,iv:23soYOeKC+CvLqwvP0M+uXICBKLsOs3z8g6iUhxzrpY=,tag:2EhgRFUaHsyNJ6TqYXJYzw==,type:str]
|
||||
vicinae.json: ENC[AES256_GCM,data:qRv0EUwtS6bK9memOG3BqLf1uE5YNlpSC/p/05sb8Fw6skESaiymo584n5N8vkvGCn2Qjv/6ioJzwP4TieGtPoR1pHXkwTTGdzsnbRoU0bMuTUhD+NUBkjo2men7Yy3ljoNoopmgz9UFfps+EWuZSMmsNgIu/4sMXsNKcpDKcd8vLpXlPogwqUtbzuKw+u4RRzox0GB0QNEGcQ/F6dVKxJ2StDI8Bfy6qovEDUnK0snoCLhvAULwYwTKef8GpkCWVQRWxXk+dA4GjtgPuiABesv82gCsmsvzmfE3LLUqw+SfYgyQIXBL0IxFiULnkYZR7wmpUeWer3VCS1D8mv/0lvmcdvMqILgkV3UqXTrPqA==,iv:v7zh1tae6TFWOYms/7ihBdoJmw3z4jhcq9aV5y46aXc=,tag:2IKxst4I1XpAHp1wkOMYNA==,type:str]
|
||||
sops:
|
||||
age:
|
||||
- recipient: age14vktfes95f33vuefwnmuvryas7az04u76dsgyhfvsx73czkvmp2q7njkl4
|
||||
@@ -19,7 +23,7 @@ sops:
|
||||
UGpKTHZTT2JZU0xaTHhhRjk2bEhaU1EKutUEk+TMTATHEoM9+MOdkUnIoBMeeDfu
|
||||
+GGKvInVKkAOtujBtSMj+xM8AEcfaHAFtwTgP/HEk3Hu6v7gp14oew==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
lastmodified: "2026-05-07T02:30:17Z"
|
||||
mac: ENC[AES256_GCM,data:tF/Nr1iTuV52xQNxgil6I0TMwCiJ1oyz2OLgb2DVWVjTMfKT0wlOMK/Rm62bTjRvXFZnGtmS0YoVLkIjFzJ3hjt+626P69e7rdRkwpSz0rbZX9Tb+jxvGKfSwqiGocPA/rlMXTy/vPIM9/gg4b8rhjMnTiNH9bkODcKwF5LIjc0=,iv:uWiQrav4scz2iz3ZmuXfgMdg+228wNNmZ/LDtU11D/o=,tag:rhHrbu1a3Ph7pnqLsfm6nQ==,type:str]
|
||||
lastmodified: "2026-05-07T13:21:48Z"
|
||||
mac: ENC[AES256_GCM,data:VWNmixzidftm4u0lUt5yL9rlvQXOXVT1+A6b/6IyO9WsWi5aM67t9l9phwRxLYad1lLL/epDmJyIJQ0ck01CzQ/hFm2mnMk87ofrwbph3GVdvrYj+2dDkzIBCwDUe/p4rkrTSo87FVJZ8NvrndbBLX3pq7Axjeo92b3Zxfxg+L8=,iv:IqCOBV5EICtO1hRO07Df0fgobO+/biS8O/4lva7NfEg=,tag:vPltr8g61OdKK4XXFyJdgQ==,type:str]
|
||||
unencrypted_suffix: _unencrypted
|
||||
version: 3.12.2
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
"https://nix-on-droid.cachix.org"
|
||||
"https://lan-mouse.cachix.org"
|
||||
"https://wezterm.cachix.org"
|
||||
"https://cache.nixos-cuda.org"
|
||||
];
|
||||
trusted-substituters = [
|
||||
"https://nix-on-droid.cachix.org"
|
||||
@@ -30,6 +31,7 @@
|
||||
"nix-on-droid.cachix.org-1:56snoMJTXmDRC1Ei24CmKoUqvHJ9XCp+nidK7qkMQrU="
|
||||
"lan-mouse.cachix.org-1:KlE2AEZUgkzNKM7BIzMQo8w9yJYqUpor1CAUNRY6OyM="
|
||||
"wezterm.cachix.org-1:kAbhjYUC9qvblTE+s7S+kl5XM1zVa4skO+E/1IDWdH0="
|
||||
"cache.nixos-cuda.org:74DUi4Ye579gUqzH4ziL9IyiJBlDpMRn9MBN8oNan9M="
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
13
modules/nixos/desktop/graphics.nix
Normal file
13
modules/nixos/desktop/graphics.nix
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
flake.modules.nixos.desktop = {
|
||||
hardware = {
|
||||
graphics = {
|
||||
enable = true;
|
||||
enable32Bit = true;
|
||||
};
|
||||
|
||||
enableAllFirmware = true;
|
||||
usb-modeswitch.enable = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
15
modules/nixos/desktop/obs-studio.nix
Normal file
15
modules/nixos/desktop/obs-studio.nix
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
flake.modules.nixos.desktop =
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
programs.obs-studio = {
|
||||
enable = true;
|
||||
enableVirtualCamera = true;
|
||||
plugins = with pkgs.obs-studio-plugins; [
|
||||
obs-vaapi
|
||||
wlrobs
|
||||
obs-source-record
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
118
modules/nixos/virtualisation/distrobox.nix
Normal file
118
modules/nixos/virtualisation/distrobox.nix
Normal file
@@ -0,0 +1,118 @@
|
||||
{
|
||||
flake.modules.nixos.virtualisation =
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
cfg = config.tnix.virtualisation;
|
||||
in
|
||||
{
|
||||
options.tnix.virtualisation.distrobox = {
|
||||
enable = lib.mkEnableOption "Enable DistroBox";
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.distrobox.enable {
|
||||
virtualisation.waydroid.enable = true;
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
distrobox
|
||||
|
||||
(writeShellScriptBin "dbox-create" ''
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# 1. Initialize variables
|
||||
IMAGE=""
|
||||
NAME=""
|
||||
|
||||
# Array to hold optional arguments (like volumes)
|
||||
declare -a EXTRA_ARGS
|
||||
|
||||
# 2. Parse arguments
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
-i|--image)
|
||||
IMAGE="$2"
|
||||
shift 2
|
||||
;;
|
||||
-n|--name)
|
||||
NAME="$2"
|
||||
shift 2
|
||||
;;
|
||||
-p|--profile)
|
||||
echo ":: Profile mode enabled: Mounting Nix store and user profiles (Read-Only)"
|
||||
# Add volume flags to the array
|
||||
EXTRA_ARGS+=( "--volume" "/nix/store:/nix/store:ro" )
|
||||
EXTRA_ARGS+=( "--volume" "/etc/profiles/per-user:/etc/profiles/per-user:ro" )
|
||||
EXTRA_ARGS+=( "--volume" "/etc/static/profiles/per-user:/etc/static/profiles/per-user:ro" )
|
||||
shift 1
|
||||
;;
|
||||
*)
|
||||
echo "Unknown option $1"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ -z "$IMAGE" ] || [ -z "$NAME" ]; then
|
||||
echo "Usage: dbox-create -i <image> -n <name> [-p]"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 3. Define the custom home path
|
||||
CUSTOM_HOME="$HOME/Distrobox/$NAME"
|
||||
|
||||
echo "------------------------------------------------"
|
||||
echo "Creating Distrobox: $NAME"
|
||||
echo "Location: $CUSTOM_HOME"
|
||||
echo "------------------------------------------------"
|
||||
|
||||
# 4. Run Distrobox Create
|
||||
# We expand "''${EXTRA_ARGS[@]}" to properly pass the volume arguments
|
||||
${pkgs.distrobox}/bin/distrobox create \
|
||||
--image "$IMAGE" \
|
||||
--name "$NAME" \
|
||||
--home "$CUSTOM_HOME" \
|
||||
"''${EXTRA_ARGS[@]}"
|
||||
|
||||
# Check exit code
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Error: Distrobox creation failed."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 5. Post-Creation: Symlink Config Files
|
||||
echo "--> Linking configurations to $NAME..."
|
||||
|
||||
# Helper function to symlink
|
||||
link_config() {
|
||||
SRC="$1"
|
||||
DEST="$2"
|
||||
DEST_DIR=$(dirname "$DEST")
|
||||
|
||||
# Create parent directory if it doesn't exist
|
||||
mkdir -p "$DEST_DIR"
|
||||
|
||||
if [ -e "$SRC" ]; then
|
||||
# ln -sf: symbolic link, force overwrite
|
||||
ln -sf "$SRC" "$DEST"
|
||||
echo " [LINK] $DEST -> $SRC"
|
||||
else
|
||||
echo " [SKIP] $SRC not found on host"
|
||||
fi
|
||||
}
|
||||
|
||||
# Create Symlinks
|
||||
link_config "$HOME/.zshrc" "$CUSTOM_HOME/.zshrc"
|
||||
link_config "$HOME/.zshenv" "$CUSTOM_HOME/.zshenv"
|
||||
link_config "$HOME/.config/fastfetch" "$CUSTOM_HOME/.config/fastfetch"
|
||||
link_config "$HOME/.config/starship.toml" "$CUSTOM_HOME/.config/starship.toml"
|
||||
|
||||
echo "--> Done! Enter via: distrobox enter $NAME"
|
||||
'')
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user