"BACALAH" juga tersedia dalam Bahasa Inggris.
(DRY) - Don't repeat yourself sebuah prinsip dalam pengembangan perangkat lunak (software development). Prinsip tersebut harusnya kita gunakan untuk mengurangi pekerjaan yang berulang-ulang dan menghabiskan waktu. Secara pribadi saya hanya mencoba menerapkan prinsip tersebut dalam bekerja secara professional atau personal. Contoh paling dasar yakni membuat dotfiles ini, yah gunannya agar saya tak perlu menyediakan kebutuhan perangkat atau alat yang digunakan dalam sehari - hari. Maka, dari motivasi ini kamu dapat melihat tujuan utamanya (Goal).
Pekerjaan seorang pengembang perangkat lunak, perekayasa perangkat lunak, atau buruh perangkat lunak membutuhkan alat yang digunakan diatas sebuah sistem yang berjalan (istilahnya sistem operasi atau OS). Saya familiar dalam menggunakan sistem operasi seperti OSX yang berbasis Darwin/unix besutan si buah apple dan ArchLinux yang berbasis Linux. Yah tujuan saya untuk menjadi seorang manusia pengguna yang agnostik (tidak beragama terikat pada sebuah sistem tetapi tetap setia kepada pencipta pengguna, kecuali sistem operasi buatan Mikocok). Alat - alat tersebut dikumpulkan dalam satu tempat untuk menyimpan segala hal mengenai alat - alat, konfigurasi, pengaturan, kredensial, dan lain - lain yang menunjang kebutuhan bekerja atau sekedar mengoperasikan komputer. Wadah saya dimana ? di github ini, maka kita memerlukan git atau alat lain, yang jelas kita tetap sinkron diantara setiap mesin yang kita gunakan sehingga kita tidak melakukan hal yang berulang-ulang.
agar tetap murni dan sama antara setiap mesin maka saya memutuskan untuk menggunakan Nix.
Nix merupakan "purely functional package manager", pengalaman yang dirasakan oleh Nix benar - benar berbeda dari pada package manager yang lain. Untuk beberapa orang mungkin terlihat rumit untuk digunakan, namun hal tersebut sangat worth it jika kamu benar - benar paham apa yang kamu butuhkan.
Jika kamu pernah menggunakan "virtual env" alat yang populer di ekosistem "python" maka kamu dapat merasakan hal yang sama namun lintas sistem operasi, platform, dan ekosistem bahasa pemrograman.
Karena nix menggunakan konsep functional seperti declarative maka sebaiknya dimanfaatkan dengan baik. seperti mendeklarasikan kebutuhan lalu mendeklarasikan dengan bahasa nix.
Heavily inspired from (malob/nixpkgs).
This is my personal configuration with nix using flakes, home-manager, & nix-darwin for Darwin or MacOS System.
.
├── darwin.nix (Nix Darwin configuration)
├── default.nix (Support legacy nix)
├── flake.lock
├── flake.nix (Flake configuration)
├── flake.nix.simple (Example: currently NOT USED)
├── home (home-manager)
│ ├── activation.nix (Some script and configuration when activation the home manager)
│ ├── packages.nix (list packages per user)
│ └── shells.nix (shell configuration, default Fish shell with startship)
├── nixpkgs.nix (Support legacy nix)
├── pkgs (modules for overlay in flake.nix, mostly generated by related tools like node2nix)
│ └── node-packages
│ ├── README.md
│ ├── default.nix
│ ├── node-env.nix
│ ├── node-packages.json
│ └── node-packages.nix
└── result -> /nix/store/xxxxxxx (the result when completed run nix build)
4 directories, 15 files
System | Single User | Multiple User | Command |
---|---|---|---|
Linux | ✅ | ✅ | Single User • Multi User |
Darwin (MacOS) | ❌ | ✅ | Multi User |
More... |
sh <(curl -L https://nixos.org/nix/install) --daemon
sh <(curl -L https://nixos.org/nix/install) --no-daemon
sh <(curl -L https://nixos.org/nix/install)
In general installation of nix, the nix configuration is located in ~/.config/nix/nix.conf
.
You MUST be set the experimental-features
before use this configuration.
experimental-features = nix-command flakes
// (optional) for distribution cache (DON'T COPY THIS COMMENT LINE)
substituters = https://cache.nixos.org https://cache.nixos.org/ https://r17.cachix.org
- Clone this repository
// with SSH
git clone [email protected]:r17x/nixpkgs ~/.config/nixpkgs
// OR with HTTP
git clone https://github.com/r17x/nixpkgs ~/.config/nixpkgs
- Change directory to
~/.config/nixpkgs
cd ~/.config/nixpkgs
- Run Build
command for build:nix build .#darwinConfigurations.[NAME].system
Available for[NAME]
:RG
nix build .#darwinConfigurations.RG.system
- Apply from
Result
command for apply the result:./result/sw/bin/darwin-rebuild switch --flake .#[NAME]
Available for[NAME]
:RG
AfterRun Build
you can apply from./result
with this command
./result/sw/bin/darwin-rebuild switch --flake .#RG
- Done 🚀🎉
drb
- darwin rebuild aliases - rebuild this nixpkgs.drs
- darwin rebuild and switch the build version (make current build to current version of environment).lenv
- list of build version<VERSION>
, that's usefull for switch aka rollback environment.senv <VERSION>
- switch spesific version (number).
- malob/nixpkgs ~ malob Nix System configs!.